summaryrefslogtreecommitdiff
authorzecke <zecke>2004-02-07 18:51:44 (UTC)
committer zecke <zecke>2004-02-07 18:51:44 (UTC)
commite74082b93d1948385d8d32ed92e61396b74d72f1 (patch) (unidiff)
tree72fa998043e8218412b593626093f62b629154cc
parenta41eba9e8404fb6321097e86736e23fbce4ead7a (diff)
downloadopie-e74082b93d1948385d8d32ed92e61396b74d72f1.zip
opie-e74082b93d1948385d8d32ed92e61396b74d72f1.tar.gz
opie-e74082b93d1948385d8d32ed92e61396b74d72f1.tar.bz2
Rename the rest bunch of functions <- fix compiling...
Readd the todo mark about constness initButtons is not const...
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice.cpp8
-rw-r--r--libopie2/opiecore/device/odevice.h12
-rw-r--r--libopie2/opiecore/device/odevice_ipaq.cpp2
-rw-r--r--libopie2/opiecore/device/odevice_ipaq.h2
-rw-r--r--libopie2/opiecore/device/odevice_simpad.cpp2
-rw-r--r--libopie2/opiecore/device/odevice_simpad.h2
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp6
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.h6
8 files changed, 21 insertions, 19 deletions
diff --git a/libopie2/opiecore/device/odevice.cpp b/libopie2/opiecore/device/odevice.cpp
index 6c8432f..72b9ac7 100644
--- a/libopie2/opiecore/device/odevice.cpp
+++ b/libopie2/opiecore/device/odevice.cpp
@@ -1,622 +1,622 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#include "odevice_ipaq.h" 30#include "odevice_ipaq.h"
31#include "odevice_jornada.h" 31#include "odevice_jornada.h"
32#include "odevice_ramses.h" 32#include "odevice_ramses.h"
33#include "odevice_simpad.h" 33#include "odevice_simpad.h"
34#include "odevice_yopy.h" 34#include "odevice_yopy.h"
35#include "odevice_zaurus.h" 35#include "odevice_zaurus.h"
36 36
37/* QT */ 37/* QT */
38#include <qapplication.h> 38#include <qapplication.h>
39#include <qfile.h> 39#include <qfile.h>
40#include <qtextstream.h> 40#include <qtextstream.h>
41#include <qwindowsystem_qws.h> 41#include <qwindowsystem_qws.h>
42 42
43/* OPIE */ 43/* OPIE */
44#include <qpe/config.h> 44#include <qpe/config.h>
45#include <qpe/resource.h> 45#include <qpe/resource.h>
46#include <qpe/sound.h> 46#include <qpe/sound.h>
47#include <qpe/qcopenvelope_qws.h> 47#include <qpe/qcopenvelope_qws.h>
48 48
49/* STD */ 49/* STD */
50#include <fcntl.h> 50#include <fcntl.h>
51#include <math.h> 51#include <math.h>
52#include <stdlib.h> 52#include <stdlib.h>
53#include <signal.h> 53#include <signal.h>
54#include <sys/ioctl.h> 54#include <sys/ioctl.h>
55#include <sys/time.h> 55#include <sys/time.h>
56#include <unistd.h> 56#include <unistd.h>
57#ifndef QT_NO_SOUND 57#ifndef QT_NO_SOUND
58#include <linux/soundcard.h> 58#include <linux/soundcard.h>
59#endif 59#endif
60 60
61const char* PATH_PROC_CPUINFO = "/proc/cpuinfo"; 61const char* PATH_PROC_CPUINFO = "/proc/cpuinfo";
62 62
63using namespace Opie; 63using namespace Opie;
64 64
65ODevice *ODevice::inst() 65ODevice *ODevice::inst()
66{ 66{
67 static ODevice *dev = 0; 67 static ODevice *dev = 0;
68 68
69 // rewrite this to only use /proc/cpuinfo or so 69 // rewrite this to only use /proc/cpuinfo or so
70 70
71 if ( !dev ) 71 if ( !dev )
72 { 72 {
73 QFile f( PATH_PROC_CPUINFO ); 73 QFile f( PATH_PROC_CPUINFO );
74 if ( f.open( IO_ReadOnly ) ) 74 if ( f.open( IO_ReadOnly ) )
75 { 75 {
76 QTextStream s( &f ); 76 QTextStream s( &f );
77 while ( !s.atEnd() ) 77 while ( !s.atEnd() )
78 { 78 {
79 QString line; 79 QString line;
80 line = s.readLine(); 80 line = s.readLine();
81 if ( line.startsWith( "Hardware" ) ) 81 if ( line.startsWith( "Hardware" ) )
82 { 82 {
83 qDebug( "ODevice() - found '%s'", (const char*) line ); 83 qDebug( "ODevice() - found '%s'", (const char*) line );
84 if ( line.contains( "sharp", false ) ) dev = new Zaurus(); 84 if ( line.contains( "sharp", false ) ) dev = new Zaurus();
85 else if ( line.contains( "ipaq", false ) ) dev = new iPAQ(); 85 else if ( line.contains( "ipaq", false ) ) dev = new iPAQ();
86 else if ( line.contains( "simpad", false ) ) dev = new SIMpad(); 86 else if ( line.contains( "simpad", false ) ) dev = new SIMpad();
87 else if ( line.contains( "jornada", false ) ) dev = new Jornada(); 87 else if ( line.contains( "jornada", false ) ) dev = new Jornada();
88 else if ( line.contains( "ramses", false ) ) dev = new Ramses(); 88 else if ( line.contains( "ramses", false ) ) dev = new Ramses();
89 else qWarning( "ODevice() - unknown hardware - using default." ); 89 else qWarning( "ODevice() - unknown hardware - using default." );
90 break; 90 break;
91 } 91 }
92 } 92 }
93 } 93 }
94 else 94 else
95 { 95 {
96 qWarning( "ODevice() - can't open '%s' - unknown hardware - using default." ); 96 qWarning( "ODevice() - can't open '%s' - unknown hardware - using default." );
97 } 97 }
98 if ( !dev ) dev = new ODevice(); 98 if ( !dev ) dev = new ODevice();
99 dev->init(); 99 dev->init();
100 } 100 }
101 return dev; 101 return dev;
102} 102}
103 103
104ODevice::ODevice() 104ODevice::ODevice()
105{ 105{
106 d = new ODeviceData; 106 d = new ODeviceData;
107 107
108 d->m_modelstr = "Unknown"; 108 d->m_modelstr = "Unknown";
109 d->m_model = Model_Unknown; 109 d->m_model = Model_Unknown;
110 d->m_vendorstr = "Unknown"; 110 d->m_vendorstr = "Unknown";
111 d->m_vendor = Vendor_Unknown; 111 d->m_vendor = Vendor_Unknown;
112 d->m_systemstr = "Unknown"; 112 d->m_systemstr = "Unknown";
113 d->m_system = System_Unknown; 113 d->m_system = System_Unknown;
114 d->m_sysverstr = "0.0"; 114 d->m_sysverstr = "0.0";
115 d->m_rotation = Rot0; 115 d->m_rotation = Rot0;
116 d->m_direction = CW; 116 d->m_direction = CW;
117 117
118 d->m_holdtime = 1000; // 1000ms 118 d->m_holdtime = 1000; // 1000ms
119 d->m_buttons = 0; 119 d->m_buttons = 0;
120 d->m_cpu_frequencies = new QStrList; 120 d->m_cpu_frequencies = new QStrList;
121} 121}
122 122
123void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 123void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
124{ 124{
125 if ( msg == "deviceButtonMappingChanged()" ) { 125 if ( msg == "deviceButtonMappingChanged()" ) {
126 reloadButtonMapping(); 126 reloadButtonMapping();
127 } 127 }
128} 128}
129 129
130void ODevice::init() 130void ODevice::init()
131{ 131{
132} 132}
133 133
134/** 134/**
135* This method initialises the button mapping 135* This method initialises the button mapping
136*/ 136*/
137void ODevice::initButtons() 137void ODevice::initButtons()
138{ 138{
139 if ( d->m_buttons ) 139 if ( d->m_buttons )
140 return; 140 return;
141 141
142 qDebug ( "init Buttons" ); 142 qDebug ( "init Buttons" );
143 d->m_buttons = new QValueList <ODeviceButton>; 143 d->m_buttons = new QValueList <ODeviceButton>;
144 144
145 reloadButtonMapping(); 145 reloadButtonMapping();
146 146
147 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 147 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
148 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 148 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
149} 149}
150 150
151ODevice::~ODevice() 151ODevice::~ODevice()
152{ 152{
153// we leak m_devicebuttons and m_cpu_frequency 153// we leak m_devicebuttons and m_cpu_frequency
154// but it's a singleton and it is not so importantant 154// but it's a singleton and it is not so importantant
155// -zecke 155// -zecke
156 delete d; 156 delete d;
157} 157}
158 158
159bool ODevice::setSoftSuspend ( bool /*soft*/ ) 159bool ODevice::setSoftSuspend ( bool /*soft*/ )
160{ 160{
161 return false; 161 return false;
162} 162}
163 163
164//#include <linux/apm_bios.h> 164//#include <linux/apm_bios.h>
165 165
166#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 166#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
167 167
168/** 168/**
169* This method will try to suspend the device 169* This method will try to suspend the device
170* It only works if the user is the QWS Server and the apm application 170* It only works if the user is the QWS Server and the apm application
171* is installed. 171* is installed.
172* It tries to suspend and then waits some time cause some distributions 172* It tries to suspend and then waits some time cause some distributions
173* do have asynchronus apm implementations. 173* do have asynchronus apm implementations.
174* This method will either fail and return false or it'll suspend the 174* This method will either fail and return false or it'll suspend the
175* device and return once the device got woken up 175* device and return once the device got woken up
176* 176*
177* @return if the device got suspended 177* @return if the device got suspended
178*/ 178*/
179bool ODevice::suspend() 179bool ODevice::suspend()
180{ 180{
181 qDebug("ODevice::suspend"); 181 qDebug("ODevice::suspend");
182 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 182 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
183 return false; 183 return false;
184 184
185 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 185 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
186 return false; 186 return false;
187 187
188 bool res = false; 188 bool res = false;
189 189
190 struct timeval tvs, tvn; 190 struct timeval tvs, tvn;
191 ::gettimeofday ( &tvs, 0 ); 191 ::gettimeofday ( &tvs, 0 );
192 192
193 ::sync(); // flush fs caches 193 ::sync(); // flush fs caches
194 res = ( ::system ( "apm --suspend" ) == 0 ); 194 res = ( ::system ( "apm --suspend" ) == 0 );
195 195
196 // This is needed because the iPAQ apm implementation is asynchronous and we 196 // This is needed because the iPAQ apm implementation is asynchronous and we
197 // can not be sure when exactly the device is really suspended 197 // can not be sure when exactly the device is really suspended
198 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 198 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
199 199
200 if ( res ) { 200 if ( res ) {
201 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 201 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
202 ::usleep ( 200 * 1000 ); 202 ::usleep ( 200 * 1000 );
203 ::gettimeofday ( &tvn, 0 ); 203 ::gettimeofday ( &tvn, 0 );
204 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 204 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
205 } 205 }
206 206
207 return res; 207 return res;
208} 208}
209 209
210//#include <linux/fb.h> better not rely on kernel headers in userspace ... 210//#include <linux/fb.h> better not rely on kernel headers in userspace ...
211 211
212#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 212#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
213 213
214/* VESA Blanking Levels */ 214/* VESA Blanking Levels */
215#define VESA_NO_BLANKING 0 215#define VESA_NO_BLANKING 0
216#define VESA_VSYNC_SUSPEND 1 216#define VESA_VSYNC_SUSPEND 1
217#define VESA_HSYNC_SUSPEND 2 217#define VESA_HSYNC_SUSPEND 2
218#define VESA_POWERDOWN 3 218#define VESA_POWERDOWN 3
219 219
220/** 220/**
221* This sets the display on or off 221* This sets the display on or off
222*/ 222*/
223bool ODevice::setDisplayStatus ( bool on ) 223bool ODevice::setDisplayStatus ( bool on )
224{ 224{
225 qDebug("ODevice::setDisplayStatus(%d)", on); 225 qDebug("ODevice::setDisplayStatus(%d)", on);
226 226
227 if ( d->m_model == Model_Unknown ) 227 if ( d->m_model == Model_Unknown )
228 return false; 228 return false;
229 229
230 bool res = false; 230 bool res = false;
231 int fd; 231 int fd;
232 232
233 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 233 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
234 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 234 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
235 ::close ( fd ); 235 ::close ( fd );
236 } 236 }
237 return res; 237 return res;
238} 238}
239 239
240/** 240/**
241* This sets the display brightness 241* This sets the display brightness
242* 242*
243* @param p The brightness to be set on a scale from 0 to 255 243* @param p The brightness to be set on a scale from 0 to 255
244* @return success or failure 244* @return success or failure
245*/ 245*/
246bool ODevice::setDisplayBrightness ( int p) 246bool ODevice::setDisplayBrightness ( int p)
247{ 247{
248 Q_UNUSED( p ) 248 Q_UNUSED( p )
249 return false; 249 return false;
250} 250}
251 251
252/** 252/**
253* @return returns the number of steppings on the brightness slider 253* @return returns the number of steppings on the brightness slider
254* in the Light-'n-Power settings. 254* in the Light-'n-Power settings.
255*/ 255*/
256int ODevice::displayBrightnessResolution() const 256int ODevice::displayBrightnessResolution() const
257{ 257{
258 return 16; 258 return 16;
259} 259}
260 260
261/** 261/**
262* This sets the display contrast 262* This sets the display contrast
263* @param p The contrast to be set on a scale from 0 to 255 263* @param p The contrast to be set on a scale from 0 to 255
264* @return success or failure 264* @return success or failure
265*/ 265*/
266bool ODevice::setDisplayContrast ( int p) 266bool ODevice::setDisplayContrast ( int p)
267{ 267{
268 Q_UNUSED( p ) 268 Q_UNUSED( p )
269 return false; 269 return false;
270} 270}
271 271
272/** 272/**
273* @return return the max value for the brightness settings slider 273* @return return the max value for the brightness settings slider
274* or 0 if the device doesn't support setting of a contrast 274* or 0 if the device doesn't support setting of a contrast
275*/ 275*/
276int ODevice::displayContrastResolution() const 276int ODevice::displayContrastResolution() const
277{ 277{
278 return 0; 278 return 0;
279} 279}
280 280
281/** 281/**
282* This returns the vendor as string 282* This returns the vendor as string
283* @return Vendor as QString 283* @return Vendor as QString
284*/ 284*/
285QString ODevice::vendorString() const 285QString ODevice::vendorString() const
286{ 286{
287 return d->m_vendorstr; 287 return d->m_vendorstr;
288} 288}
289 289
290/** 290/**
291* This returns the vendor as one of the values of OVendor 291* This returns the vendor as one of the values of OVendor
292* @return OVendor 292* @return OVendor
293*/ 293*/
294OVendor ODevice::vendor() const 294OVendor ODevice::vendor() const
295{ 295{
296 return d->m_vendor; 296 return d->m_vendor;
297} 297}
298 298
299/** 299/**
300* This returns the model as a string 300* This returns the model as a string
301* @return A string representing the model 301* @return A string representing the model
302*/ 302*/
303QString ODevice::modelString() const 303QString ODevice::modelString() const
304{ 304{
305 return d->m_modelstr; 305 return d->m_modelstr;
306} 306}
307 307
308/** 308/**
309* This does return the OModel used 309* This does return the OModel used
310*/ 310*/
311OModel ODevice::model() const 311OModel ODevice::model() const
312{ 312{
313 return d->m_model; 313 return d->m_model;
314} 314}
315 315
316/** 316/**
317* This does return the systen name 317* This does return the systen name
318*/ 318*/
319QString ODevice::systemString() const 319QString ODevice::systemString() const
320{ 320{
321 return d->m_systemstr; 321 return d->m_systemstr;
322} 322}
323 323
324/** 324/**
325* Return System as OSystem value 325* Return System as OSystem value
326*/ 326*/
327OSystem ODevice::system() const 327OSystem ODevice::system() const
328{ 328{
329 return d->m_system; 329 return d->m_system;
330} 330}
331 331
332/** 332/**
333* @return the version string of the base system 333* @return the version string of the base system
334*/ 334*/
335QString ODevice::systemVersionString() const 335QString ODevice::systemVersionString() const
336{ 336{
337 return d->m_sysverstr; 337 return d->m_sysverstr;
338} 338}
339 339
340/** 340/**
341* @return the current Transformation 341* @return the current Transformation
342*/ 342*/
343Transformation ODevice::rotation() const 343Transformation ODevice::rotation() const
344{ 344{
345 return d->m_rotation; 345 return d->m_rotation;
346} 346}
347 347
348/** 348/**
349* @return the current rotation direction 349* @return the current rotation direction
350*/ 350*/
351ODirection ODevice::direction() const 351ODirection ODevice::direction() const
352{ 352{
353 return d->m_direction; 353 return d->m_direction;
354} 354}
355 355
356/** 356/**
357* This plays an alarmSound 357* This plays an alarm sound
358*/ 358*/
359void ODevice::alarmSound() 359void ODevice::playAlarmSound()
360{ 360{
361#ifndef QT_NO_SOUND 361#ifndef QT_NO_SOUND
362 static Sound snd ( "alarm" ); 362 static Sound snd ( "alarm" );
363 363
364 if ( snd. isFinished()) 364 if ( snd. isFinished())
365 snd. play(); 365 snd. play();
366#endif 366#endif
367} 367}
368 368
369/** 369/**
370* This plays a key sound 370* This plays a key sound
371*/ 371*/
372void ODevice::keySound() 372void ODevice::playKeySound()
373{ 373{
374#ifndef QT_NO_SOUND 374#ifndef QT_NO_SOUND
375 static Sound snd ( "keysound" ); 375 static Sound snd ( "keysound" );
376 376
377 if ( snd. isFinished()) 377 if ( snd. isFinished())
378 snd. play(); 378 snd. play();
379#endif 379#endif
380} 380}
381 381
382/** 382/**
383* This plays a touch sound 383* This plays a touch sound
384*/ 384*/
385void ODevice::touchSound() 385void ODevice::playTouchSound()
386{ 386{
387#ifndef QT_NO_SOUND 387#ifndef QT_NO_SOUND
388 static Sound snd ( "touchsound" ); 388 static Sound snd ( "touchsound" );
389 389
390 if ( snd. isFinished()) 390 if ( snd. isFinished())
391 snd. play(); 391 snd. play();
392#endif 392#endif
393} 393}
394 394
395/** 395/**
396* This method will return a list of leds 396* This method will return a list of leds
397* available on this device 397* available on this device
398* @return a list of LEDs. 398* @return a list of LEDs.
399*/ 399*/
400QValueList <OLed> ODevice::ledList() const 400QValueList <OLed> ODevice::ledList() const
401{ 401{
402 return QValueList <OLed>(); 402 return QValueList <OLed>();
403} 403}
404 404
405/** 405/**
406* This does return the state of the LEDs 406* This does return the state of the LEDs
407*/ 407*/
408QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const 408QValueList <OLedState> ODevice::ledStateList ( OLed /*which*/ ) const
409{ 409{
410 return QValueList <OLedState>(); 410 return QValueList <OLedState>();
411} 411}
412 412
413/** 413/**
414* @return the state for a given OLed 414* @return the state for a given OLed
415*/ 415*/
416OLedState ODevice::ledState ( OLed /*which*/ ) const 416OLedState ODevice::ledState ( OLed /*which*/ ) const
417{ 417{
418 return Led_Off; 418 return Led_Off;
419} 419}
420 420
421/** 421/**
422* Set the state for a LED 422* Set the state for a LED
423* @param which Which OLed to use 423* @param which Which OLed to use
424* @param st The state to set 424* @param st The state to set
425* @return success or failure 425* @return success or failure
426*/ 426*/
427bool ODevice::setLedState ( OLed which, OLedState st ) 427bool ODevice::setLedState ( OLed which, OLedState st )
428{ 428{
429 Q_UNUSED( which ) 429 Q_UNUSED( which )
430 Q_UNUSED( st ) 430 Q_UNUSED( st )
431 return false; 431 return false;
432} 432}
433 433
434/** 434/**
435* @return if the device has a light sensor 435* @return if the device has a light sensor
436*/ 436*/
437bool ODevice::hasLightSensor() const 437bool ODevice::hasLightSensor() const
438{ 438{
439 return false; 439 return false;
440} 440}
441 441
442/** 442/**
443* @return a value from the light sensor 443* @return a value from the light sensor
444*/ 444*/
445int ODevice::readLightSensor() 445int ODevice::readLightSensor()
446{ 446{
447 return -1; 447 return -1;
448} 448}
449 449
450/** 450/**
451* @return the light sensor resolution 451* @return the light sensor resolution
452*/ 452*/
453int ODevice::lightSensorResolution() const 453int ODevice::lightSensorResolution() const
454{ 454{
455 return 0; 455 return 0;
456} 456}
457 457
458/** 458/**
459* @return if the device has a hinge sensor 459* @return if the device has a hinge sensor
460*/ 460*/
461bool ODevice::hasHingeSensor() const 461bool ODevice::hasHingeSensor() const
462{ 462{
463 return false; 463 return false;
464} 464}
465 465
466/** 466/**
467* @return a value from the hinge sensor 467* @return a value from the hinge sensor
468*/ 468*/
469OHingeStatus ODevice::readHingeSensor() 469OHingeStatus ODevice::readHingeSensor()
470{ 470{
471 return CASE_UNKNOWN; 471 return CASE_UNKNOWN;
472} 472}
473 473
474/** 474/**
475* @return a list with CPU frequencies supported by the hardware 475* @return a list with CPU frequencies supported by the hardware
476*/ 476*/
477const QStrList &ODevice::allowedCpuFrequencies() const 477const QStrList &ODevice::allowedCpuFrequencies() const
478{ 478{
479 return *d->m_cpu_frequencies; 479 return *d->m_cpu_frequencies;
480} 480}
481 481
482 482
483/** 483/**
484* Set desired CPU frequency 484* Set desired CPU frequency
485* 485*
486* @param index index into d->m_cpu_frequencies of the frequency to be set 486* @param index index into d->m_cpu_frequencies of the frequency to be set
487*/ 487*/
488bool ODevice::setCurrentCpuFrequency(uint index) 488bool ODevice::setCurrentCpuFrequency(uint index)
489{ 489{
490 if (index >= d->m_cpu_frequencies->count()) 490 if (index >= d->m_cpu_frequencies->count())
491 return false; 491 return false;
492 492
493 char *freq = d->m_cpu_frequencies->at(index); 493 char *freq = d->m_cpu_frequencies->at(index);
494 qWarning("set freq to %s", freq); 494 qWarning("set freq to %s", freq);
495 495
496 int fd; 496 int fd;
497 497
498 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) { 498 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) {
499 char writeCommand[50]; 499 char writeCommand[50];
500 const int count = sprintf(writeCommand, "%s\n", freq); 500 const int count = sprintf(writeCommand, "%s\n", freq);
501 int res = (::write(fd, writeCommand, count) != -1); 501 int res = (::write(fd, writeCommand, count) != -1);
502 ::close(fd); 502 ::close(fd);
503 return res; 503 return res;
504 } 504 }
505 505
506 return false; 506 return false;
507} 507}
508 508
509 509
510/** 510/**
511* @return a list of hardware buttons 511* @return a list of hardware buttons
512*/ 512*/
513const QValueList <ODeviceButton> &ODevice::buttons() 513const QValueList <ODeviceButton> &ODevice::buttons()
514{ 514{
515 initButtons(); 515 initButtons();
516 516
517 return *d->m_buttons; 517 return *d->m_buttons;
518} 518}
519 519
520/** 520/**
521* @return The amount of time that would count as a hold 521* @return The amount of time that would count as a hold
522*/ 522*/
523uint ODevice::buttonHoldTime() const 523uint ODevice::buttonHoldTime() const
524{ 524{
525 return d->m_holdtime; 525 return d->m_holdtime;
526} 526}
527 527
528/** 528/**
529* This method return a ODeviceButton for a key code 529* This method return a ODeviceButton for a key code
530* or 0 if no special hardware button is available for the device 530* or 0 if no special hardware button is available for the device
531* 531*
532* @return The devicebutton or 0l 532* @return The devicebutton or 0l
533* @see ODeviceButton 533* @see ODeviceButton
534*/ 534*/
535const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 535const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
536{ 536{
537 initButtons(); 537 initButtons();
538 538
539 for ( QValueListConstIterator<ODeviceButton> it = d->m_buttons->begin(); it != d->m_buttons->end(); ++it ) { 539 for ( QValueListConstIterator<ODeviceButton> it = d->m_buttons->begin(); it != d->m_buttons->end(); ++it ) {
540 if ( (*it). keycode() == code ) 540 if ( (*it). keycode() == code )
541 return &(*it); 541 return &(*it);
542 } 542 }
543 return 0; 543 return 0;
544} 544}
545 545
546void ODevice::reloadButtonMapping() 546void ODevice::reloadButtonMapping()
547{ 547{
548 initButtons(); 548 initButtons();
549 549
550 Config cfg ( "ButtonSettings" ); 550 Config cfg ( "ButtonSettings" );
551 551
552 for ( uint i = 0; i < d->m_buttons->count(); i++ ) { 552 for ( uint i = 0; i < d->m_buttons->count(); i++ ) {
553 ODeviceButton &b = ( *d->m_buttons ) [i]; 553 ODeviceButton &b = ( *d->m_buttons ) [i];
554 QString group = "Button" + QString::number ( i ); 554 QString group = "Button" + QString::number ( i );
555 555
556 QCString pch, hch; 556 QCString pch, hch;
557 QCString pm, hm; 557 QCString pm, hm;
558 QByteArray pdata, hdata; 558 QByteArray pdata, hdata;
559 559
560 if ( cfg. hasGroup ( group )) { 560 if ( cfg. hasGroup ( group )) {
561 cfg. setGroup ( group ); 561 cfg. setGroup ( group );
562 pch = cfg. readEntry ( "PressedActionChannel" ). latin1(); 562 pch = cfg. readEntry ( "PressedActionChannel" ). latin1();
563 pm = cfg. readEntry ( "PressedActionMessage" ). latin1(); 563 pm = cfg. readEntry ( "PressedActionMessage" ). latin1();
564 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" )); 564 // pdata = decodeBase64 ( buttonFile. readEntry ( "PressedActionArgs" ));
565 565
566 hch = cfg. readEntry ( "HeldActionChannel" ). latin1(); 566 hch = cfg. readEntry ( "HeldActionChannel" ). latin1();
567 hm = cfg. readEntry ( "HeldActionMessage" ). latin1(); 567 hm = cfg. readEntry ( "HeldActionMessage" ). latin1();
568 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 568 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
569 } 569 }
570 570
571 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 571 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
572 572
573 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 573 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
574 } 574 }
575} 575}
576 576
577void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 577void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
578{ 578{
579 initButtons(); 579 initButtons();
580 580
581 QString mb_chan; 581 QString mb_chan;
582 582
583 if ( button >= (int) d->m_buttons->count()) 583 if ( button >= (int) d->m_buttons->count())
584 return; 584 return;
585 585
586 ODeviceButton &b = ( *d->m_buttons ) [button]; 586 ODeviceButton &b = ( *d->m_buttons ) [button];
587 b. setPressedAction ( action ); 587 b. setPressedAction ( action );
588 588
589 mb_chan=b. pressedAction(). channel(); 589 mb_chan=b. pressedAction(). channel();
590 590
591 Config buttonFile ( "ButtonSettings" ); 591 Config buttonFile ( "ButtonSettings" );
592 buttonFile. setGroup ( "Button" + QString::number ( button )); 592 buttonFile. setGroup ( "Button" + QString::number ( button ));
593 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 593 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
594 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction(). message()); 594 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction(). message());
595 595
596 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction(). data())); 596 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction(). data()));
597 597
598 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 598 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
599} 599}
600 600
601void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 601void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
602{ 602{
603 initButtons(); 603 initButtons();
604 604
605 if ( button >= (int) d->m_buttons->count()) 605 if ( button >= (int) d->m_buttons->count())
606 return; 606 return;
607 607
608 ODeviceButton &b = ( *d->m_buttons ) [button]; 608 ODeviceButton &b = ( *d->m_buttons ) [button];
609 b. setHeldAction ( action ); 609 b. setHeldAction ( action );
610 610
611 Config buttonFile ( "ButtonSettings" ); 611 Config buttonFile ( "ButtonSettings" );
612 buttonFile. setGroup ( "Button" + QString::number ( button )); 612 buttonFile. setGroup ( "Button" + QString::number ( button ));
613 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction(). channel()); 613 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction(). channel());
614 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction(). message()); 614 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction(). message());
615 615
616 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction(). data())); 616 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction(). data()));
617 617
618 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 618 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
619} 619}
620void ODevice::virtual_hook(int, void* ){ 620void ODevice::virtual_hook(int, void* ){
621 621
622} 622}
diff --git a/libopie2/opiecore/device/odevice.h b/libopie2/opiecore/device/odevice.h
index 8ae7ffa..791ccb3 100644
--- a/libopie2/opiecore/device/odevice.h
+++ b/libopie2/opiecore/device/odevice.h
@@ -1,329 +1,331 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#ifndef ODEVICE_H_ 30#ifndef ODEVICE_H_
31#define ODEVICE_H_ 31#define ODEVICE_H_
32 32
33/* OPIE */ 33/* OPIE */
34#include <opie2/odevicebutton.h> 34#include <opie2/odevicebutton.h>
35#include <qpe/qpeapplication.h> /* for Transformation enum.. */ 35#include <qpe/qpeapplication.h> /* for Transformation enum.. */
36 36
37/* QT */ 37/* QT */
38#include <qnamespace.h> 38#include <qnamespace.h>
39#include <qobject.h> 39#include <qobject.h>
40#include <qstring.h> 40#include <qstring.h>
41#include <qstrlist.h> 41#include <qstrlist.h>
42 42
43namespace Opie 43namespace Opie
44{ 44{
45 class ODeviceData; 45 class ODeviceData;
46/** 46/**
47 * The available devices 47 * The available devices
48 */ 48 */
49enum OModel { 49enum OModel {
50 Model_Unknown, // = 0 50 Model_Unknown, // = 0
51 51
52 Model_Series_Mask = 0xff000000, 52 Model_Series_Mask = 0xff000000,
53 53
54 Model_iPAQ = ( 1 << 24 ), 54 Model_iPAQ = ( 1 << 24 ),
55 55
56 Model_iPAQ_All = ( Model_iPAQ | 0xffffff ), 56 Model_iPAQ_All = ( Model_iPAQ | 0xffffff ),
57 Model_iPAQ_H31xx = ( Model_iPAQ | 0x000001 ), 57 Model_iPAQ_H31xx = ( Model_iPAQ | 0x000001 ),
58 Model_iPAQ_H36xx = ( Model_iPAQ | 0x000002 ), 58 Model_iPAQ_H36xx = ( Model_iPAQ | 0x000002 ),
59 Model_iPAQ_H37xx = ( Model_iPAQ | 0x000004 ), 59 Model_iPAQ_H37xx = ( Model_iPAQ | 0x000004 ),
60 Model_iPAQ_H38xx = ( Model_iPAQ | 0x000008 ), 60 Model_iPAQ_H38xx = ( Model_iPAQ | 0x000008 ),
61 Model_iPAQ_H39xx = ( Model_iPAQ | 0x000010 ), 61 Model_iPAQ_H39xx = ( Model_iPAQ | 0x000010 ),
62 Model_iPAQ_H5xxx = ( Model_iPAQ | 0x000011 ), 62 Model_iPAQ_H5xxx = ( Model_iPAQ | 0x000011 ),
63 63
64 Model_Jornada = ( 6 << 24 ), 64 Model_Jornada = ( 6 << 24 ),
65 Model_Jornada_56x = ( Model_Jornada | 0x000001 ), 65 Model_Jornada_56x = ( Model_Jornada | 0x000001 ),
66 66
67 Model_Zaurus = ( 2 << 24 ), 67 Model_Zaurus = ( 2 << 24 ),
68 68
69 Model_Zaurus_SL5000 = ( Model_Zaurus | 0x000001 ), 69 Model_Zaurus_SL5000 = ( Model_Zaurus | 0x000001 ),
70 Model_Zaurus_SL5500 = ( Model_Zaurus | 0x000002 ), 70 Model_Zaurus_SL5500 = ( Model_Zaurus | 0x000002 ),
71 Model_Zaurus_SLA300 = ( Model_Zaurus | 0x000003 ), 71 Model_Zaurus_SLA300 = ( Model_Zaurus | 0x000003 ),
72 Model_Zaurus_SLB600 = ( Model_Zaurus | 0x000004 ), 72 Model_Zaurus_SLB600 = ( Model_Zaurus | 0x000004 ),
73 Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x000005 ), 73 Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x000005 ),
74 74
75 Model_SIMpad = ( 3 << 24 ), 75 Model_SIMpad = ( 3 << 24 ),
76 76
77 Model_SIMpad_All = ( Model_SIMpad | 0xffffff ), 77 Model_SIMpad_All = ( Model_SIMpad | 0xffffff ),
78 Model_SIMpad_CL4 = ( Model_SIMpad | 0x000001 ), 78 Model_SIMpad_CL4 = ( Model_SIMpad | 0x000001 ),
79 Model_SIMpad_SL4 = ( Model_SIMpad | 0x000002 ), 79 Model_SIMpad_SL4 = ( Model_SIMpad | 0x000002 ),
80 Model_SIMpad_SLC = ( Model_SIMpad | 0x000004 ), 80 Model_SIMpad_SLC = ( Model_SIMpad | 0x000004 ),
81 Model_SIMpad_TSinus = ( Model_SIMpad | 0x000008 ), 81 Model_SIMpad_TSinus = ( Model_SIMpad | 0x000008 ),
82 82
83 Model_Ramses = ( 4 << 24 ), 83 Model_Ramses = ( 4 << 24 ),
84 84
85 Model_Ramses_All = ( Model_Ramses | 0xffffff ), 85 Model_Ramses_All = ( Model_Ramses | 0xffffff ),
86 Model_Ramses_MNCI = ( Model_Ramses | 0x000001 ), 86 Model_Ramses_MNCI = ( Model_Ramses | 0x000001 ),
87 87
88 Model_Yopy = ( 5 << 24 ), 88 Model_Yopy = ( 5 << 24 ),
89 89
90 Model_Yopy_All = ( Model_Yopy | 0xffffff ), 90 Model_Yopy_All = ( Model_Yopy | 0xffffff ),
91 Model_Yopy_3000 = ( Model_Yopy | 0x000001 ), 91 Model_Yopy_3000 = ( Model_Yopy | 0x000001 ),
92 Model_Yopy_3500 = ( Model_Yopy | 0x000002 ), 92 Model_Yopy_3500 = ( Model_Yopy | 0x000002 ),
93 Model_Yopy_3700 = ( Model_Yopy | 0x000003 ), 93 Model_Yopy_3700 = ( Model_Yopy | 0x000003 ),
94 94
95}; 95};
96 96
97/** 97/**
98 * The vendor of the device 98 * The vendor of the device
99 */ 99 */
100enum OVendor { 100enum OVendor {
101 Vendor_Unknown, 101 Vendor_Unknown,
102 102
103 Vendor_HP, 103 Vendor_HP,
104 Vendor_Sharp, 104 Vendor_Sharp,
105 Vendor_SIEMENS, 105 Vendor_SIEMENS,
106 Vendor_MundN, 106 Vendor_MundN,
107 Vendor_GMate, 107 Vendor_GMate,
108}; 108};
109 109
110/** 110/**
111 * The System used 111 * The System used
112 */ 112 */
113enum OSystem { 113enum OSystem {
114 System_Unknown, 114 System_Unknown,
115 115
116 System_Familiar, 116 System_Familiar,
117 System_Zaurus, 117 System_Zaurus,
118 System_OpenZaurus, 118 System_OpenZaurus,
119 System_Linupy, 119 System_Linupy,
120}; 120};
121 121
122enum OLedState { 122enum OLedState {
123 Led_Off, 123 Led_Off,
124 Led_On, 124 Led_On,
125 Led_BlinkSlow, 125 Led_BlinkSlow,
126 Led_BlinkFast 126 Led_BlinkFast
127}; 127};
128 128
129enum OLed { 129enum OLed {
130 Led_Mail, 130 Led_Mail,
131 Led_Power, 131 Led_Power,
132 Led_BlueTooth 132 Led_BlueTooth
133}; 133};
134 134
135enum OHardKey { 135enum OHardKey {
136 HardKey_Datebook = Qt::Key_F9, 136 HardKey_Datebook = Qt::Key_F9,
137 HardKey_Contacts = Qt::Key_F10, 137 HardKey_Contacts = Qt::Key_F10,
138 HardKey_Menu = Qt::Key_F11, 138 HardKey_Menu = Qt::Key_F11,
139 HardKey_Home = Qt::Key_F12, 139 HardKey_Home = Qt::Key_F12,
140 HardKey_Mail = Qt::Key_F13, 140 HardKey_Mail = Qt::Key_F13,
141 HardKey_Record = Qt::Key_F24, 141 HardKey_Record = Qt::Key_F24,
142 HardKey_Suspend = Qt::Key_F34, 142 HardKey_Suspend = Qt::Key_F34,
143 HardKey_Backlight = Qt::Key_F35, 143 HardKey_Backlight = Qt::Key_F35,
144 HardKey_Action = Qt::Key_F10, 144 HardKey_Action = Qt::Key_F10,
145 HardKey_OK = Qt::Key_F11, 145 HardKey_OK = Qt::Key_F11,
146 HardKey_End = Qt::Key_F12, 146 HardKey_End = Qt::Key_F12,
147}; 147};
148 148
149enum ODirection { 149enum ODirection {
150 CW = 0, 150 CW = 0,
151 CCW = 1, 151 CCW = 1,
152 Flip = 2, 152 Flip = 2,
153}; 153};
154 154
155enum OHingeStatus { 155enum OHingeStatus {
156 CASE_CLOSED = 3, 156 CASE_CLOSED = 3,
157 CASE_PORTRAIT = 2, 157 CASE_PORTRAIT = 2,
158 CASE_LANDSCAPE = 0, 158 CASE_LANDSCAPE = 0,
159 CASE_UNKNOWN = 1, 159 CASE_UNKNOWN = 1,
160}; 160};
161 161
162/** 162/**
163 * A singleton which gives informations about device specefic option 163 * A singleton which gives informations about device specefic option
164 * like the Hardware used, LEDs, the Base Distribution and 164 * like the Hardware used, LEDs, the Base Distribution and
165 * hardware key mappings. 165 * hardware key mappings.
166 * 166 *
167 * @short A small class for device specefic options 167 * @short A small class for device specefic options
168 * @see QObject 168 * @see QObject
169 * @author Robert Griebl 169 * @author Robert Griebl
170 * @version 1.0 170 * @version 1.0
171 */ 171 */
172class ODevice : public QObject 172class ODevice : public QObject
173{ 173{
174 Q_OBJECT 174 Q_OBJECT
175 175
176private: 176private:
177 /* disable copy */ 177 /* disable copy */
178 ODevice ( const ODevice & ); 178 ODevice ( const ODevice & );
179 179
180protected: 180protected:
181 ODevice(); 181 ODevice();
182 virtual void init(); 182 virtual void init();
183 virtual void initButtons(); 183 virtual void initButtons();
184 184
185 ODeviceData *d; 185 ODeviceData *d;
186 186
187public: 187public:
188 // sandman do we want to allow destructions? -zecke? 188 // sandman do we want to allow destructions? -zecke?
189 virtual ~ODevice(); 189 virtual ~ODevice();
190 190
191 static ODevice *inst(); 191 static ODevice *inst();
192 192
193 // information 193 // information
194 194
195 QString modelString() const; 195 QString modelString() const;
196 OModel model() const; 196 OModel model() const;
197 inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); } 197 inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); }
198 198
199 QString vendorString() const; 199 QString vendorString() const;
200 OVendor vendor() const; 200 OVendor vendor() const;
201 201
202 QString systemString() const; 202 QString systemString() const;
203 OSystem system() const; 203 OSystem system() const;
204 204
205 QString systemVersionString() const; 205 QString systemVersionString() const;
206 206
207 virtual Transformation rotation() const; 207 virtual Transformation rotation() const;
208 virtual ODirection direction() const; 208 virtual ODirection direction() const;
209 209
210 // system 210 // system
211 211
212 virtual bool setSoftSuspend ( bool on ); 212 virtual bool setSoftSuspend ( bool on );
213 virtual bool suspend(); 213 virtual bool suspend();
214 214
215 virtual bool setDisplayStatus ( bool on ); 215 virtual bool setDisplayStatus ( bool on );
216 virtual bool setDisplayBrightness ( int brightness ); 216 virtual bool setDisplayBrightness ( int brightness );
217 virtual int displayBrightnessResolution() const; 217 virtual int displayBrightnessResolution() const;
218 virtual bool setDisplayContrast ( int contrast ); 218 virtual bool setDisplayContrast ( int contrast );
219 virtual int displayContrastResolution() const; 219 virtual int displayContrastResolution() const;
220 220
221 // don't add new virtual methods, use this: 221 // don't add new virtual methods, use this:
222 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); }; 222 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); };
223 // and in your subclass do do overwrite 223 // and in your subclass do do overwrite
224 //protected virtual int virtual_hook(int, void *) 224 //protected virtual int virtual_hook(int, void *)
225 // which is defined below 225 // which is defined below
226 226
227 // input / output 227 // input / output
228 //FIXME playAlarmSound and al might be better -zecke 228 virtual void playAlarmSound();
229 virtual void alarmSound(); 229 virtual void playKeySound();
230 virtual void keySound(); 230 virtual void playTouchSound();
231 virtual void touchSound();
232 231
233 virtual QValueList <OLed> ledList() const; 232 virtual QValueList <OLed> ledList() const;
234 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 233 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
235 virtual OLedState ledState ( OLed led ) const; 234 virtual OLedState ledState ( OLed led ) const;
236 virtual bool setLedState ( OLed led, OLedState st ); 235 virtual bool setLedState ( OLed led, OLedState st );
237 236
238 virtual bool hasLightSensor() const; 237 virtual bool hasLightSensor() const;
239 virtual int readLightSensor(); 238 virtual int readLightSensor();
240 virtual int lightSensorResolution() const; 239 virtual int lightSensorResolution() const;
241 240
242 virtual bool hasHingeSensor() const; 241 virtual bool hasHingeSensor() const;
243 virtual OHingeStatus readHingeSensor(); 242 virtual OHingeStatus readHingeSensor();
244 243
245 const QStrList &allowedCpuFrequencies() const; 244 const QStrList &allowedCpuFrequencies() const;
246 bool setCurrentCpuFrequency(uint index); 245 bool setCurrentCpuFrequency(uint index);
247 246
248 /** 247 /**
249 * Returns the available buttons on this device. The number and location 248 * Returns the available buttons on this device. The number and location
250 * of buttons will vary depending on the device. Button numbers will be assigned 249 * of buttons will vary depending on the device. Button numbers will be assigned
251 * by the device manufacturer and will be from most preferred button to least preffered 250 * by the device manufacturer and will be from most preferred button to least preffered
252 * button. Note that this list only contains "user mappable" buttons. 251 * button. Note that this list only contains "user mappable" buttons.
252 *
253 * @todo Make method const and take care of calling initButtons or make that const too
254 *
253 */ 255 */
254 const QValueList<ODeviceButton> &buttons() /* ### make const */; 256 const QValueList<ODeviceButton> &buttons();
255 257
256 /** 258 /**
257 * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it 259 * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it
258 * returns 0L 260 * returns 0L
259 */ 261 */
260 const ODeviceButton *buttonForKeycode ( ushort keyCode ); 262 const ODeviceButton *buttonForKeycode ( ushort keyCode );
261 263
262 /** 264 /**
263 * Reassigns the pressed action for \a button. To return to the factory 265 * Reassigns the pressed action for \a button. To return to the factory
264 * default pass an empty string as \a qcopMessage. 266 * default pass an empty string as \a qcopMessage.
265 */ 267 */
266 void remapPressedAction ( int button, const OQCopMessage &qcopMessage ); 268 void remapPressedAction ( int button, const OQCopMessage &qcopMessage );
267 269
268 /** 270 /**
269 * Reassigns the held action for \a button. To return to the factory 271 * Reassigns the held action for \a button. To return to the factory
270 * default pass an empty string as \a qcopMessage. 272 * default pass an empty string as \a qcopMessage.
271 */ 273 */
272 void remapHeldAction ( int button, const OQCopMessage &qcopMessage ); 274 void remapHeldAction ( int button, const OQCopMessage &qcopMessage );
273 275
274 /** 276 /**
275 * How long (in ms) you have to press a button for a "hold" action 277 * How long (in ms) you have to press a button for a "hold" action
276 */ 278 */
277 uint buttonHoldTime() const; 279 uint buttonHoldTime() const;
278 280
279signals: 281signals:
280 void buttonMappingChanged(); 282 void buttonMappingChanged();
281 283
282private slots: 284private slots:
283 void systemMessage ( const QCString &, const QByteArray & ); 285 void systemMessage ( const QCString &, const QByteArray & );
284 286
285protected: 287protected:
286 void reloadButtonMapping(); 288 void reloadButtonMapping();
287 /* ugly virtual hook */ 289 /* ugly virtual hook */
288 virtual void virtual_hook( int id, void* data ); 290 virtual void virtual_hook( int id, void* data );
289}; 291};
290 292
291class ODeviceData { 293class ODeviceData {
292 294
293 public: 295 public:
294 QString m_vendorstr; 296 QString m_vendorstr;
295 OVendor m_vendor; 297 OVendor m_vendor;
296 298
297 QString m_modelstr; 299 QString m_modelstr;
298 OModel m_model; 300 OModel m_model;
299 301
300 QString m_systemstr; 302 QString m_systemstr;
301 OSystem m_system; 303 OSystem m_system;
302 304
303 QString m_sysverstr; 305 QString m_sysverstr;
304 306
305 Transformation m_rotation; 307 Transformation m_rotation;
306 ODirection m_direction; 308 ODirection m_direction;
307 309
308 QValueList <ODeviceButton> *m_buttons; 310 QValueList <ODeviceButton> *m_buttons;
309 uint m_holdtime; 311 uint m_holdtime;
310 QStrList *m_cpu_frequencies; 312 QStrList *m_cpu_frequencies;
311}; 313};
312 314
313} 315}
314 316
315static inline bool isQWS() 317static inline bool isQWS()
316{ 318{
317 return qApp ? ( qApp->type() == QApplication::GuiServer ) : false; 319 return qApp ? ( qApp->type() == QApplication::GuiServer ) : false;
318} 320}
319 321
320static QCString makeChannel ( const char *str ) 322static QCString makeChannel ( const char *str )
321{ 323{
322 if ( str && !::strchr ( str, '/' )) 324 if ( str && !::strchr ( str, '/' ))
323 return QCString ( "QPE/Application/" ) + str; 325 return QCString ( "QPE/Application/" ) + str;
324 else 326 else
325 return str; 327 return str;
326} 328}
327 329
328#endif 330#endif
329 331
diff --git a/libopie2/opiecore/device/odevice_ipaq.cpp b/libopie2/opiecore/device/odevice_ipaq.cpp
index d68bce1..d20ea4d 100644
--- a/libopie2/opiecore/device/odevice_ipaq.cpp
+++ b/libopie2/opiecore/device/odevice_ipaq.cpp
@@ -1,475 +1,475 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#include "odevice_ipaq.h" 30#include "odevice_ipaq.h"
31 31
32/* QT */ 32/* QT */
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qfile.h> 34#include <qfile.h>
35#include <qtextstream.h> 35#include <qtextstream.h>
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
37 37
38/* OPIE */ 38/* OPIE */
39#include <qpe/config.h> 39#include <qpe/config.h>
40#include <qpe/resource.h> 40#include <qpe/resource.h>
41#include <qpe/sound.h> 41#include <qpe/sound.h>
42#include <qpe/qcopenvelope_qws.h> 42#include <qpe/qcopenvelope_qws.h>
43 43
44/* STD */ 44/* STD */
45#include <fcntl.h> 45#include <fcntl.h>
46#include <math.h> 46#include <math.h>
47#include <stdlib.h> 47#include <stdlib.h>
48#include <signal.h> 48#include <signal.h>
49#include <sys/ioctl.h> 49#include <sys/ioctl.h>
50#include <sys/time.h> 50#include <sys/time.h>
51#include <unistd.h> 51#include <unistd.h>
52#ifndef QT_NO_SOUND 52#ifndef QT_NO_SOUND
53#include <linux/soundcard.h> 53#include <linux/soundcard.h>
54#endif 54#endif
55 55
56/* KERNEL */ 56/* KERNEL */
57#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 57#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
58 58
59#define OD_IO(type,number) OD_IOC(0,type,number,0) 59#define OD_IO(type,number) OD_IOC(0,type,number,0)
60#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 60#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
61#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 61#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
62#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 62#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
63 63
64typedef struct { 64typedef struct {
65 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 65 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
66 unsigned char TotalTime; /* Units of 5 seconds */ 66 unsigned char TotalTime; /* Units of 5 seconds */
67 unsigned char OnTime; /* units of 100m/s */ 67 unsigned char OnTime; /* units of 100m/s */
68 unsigned char OffTime; /* units of 100m/s */ 68 unsigned char OffTime; /* units of 100m/s */
69} LED_IN; 69} LED_IN;
70 70
71typedef struct { 71typedef struct {
72 unsigned char mode; 72 unsigned char mode;
73 unsigned char pwr; 73 unsigned char pwr;
74 unsigned char brightness; 74 unsigned char brightness;
75} FLITE_IN; 75} FLITE_IN;
76 76
77#define LED_ON OD_IOW( 'f', 5, LED_IN ) 77#define LED_ON OD_IOW( 'f', 5, LED_IN )
78#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 78#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
79 79
80struct i_button ipaq_buttons [] = { 80struct i_button ipaq_buttons [] = {
81 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 81 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
82 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 82 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
83 "devicebuttons/ipaq_calendar", 83 "devicebuttons/ipaq_calendar",
84 "datebook", "nextView()", 84 "datebook", "nextView()",
85 "today", "raise()" }, 85 "today", "raise()" },
86 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 86 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
87 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 87 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
88 "devicebuttons/ipaq_contact", 88 "devicebuttons/ipaq_contact",
89 "addressbook", "raise()", 89 "addressbook", "raise()",
90 "addressbook", "beamBusinessCard()" }, 90 "addressbook", "beamBusinessCard()" },
91 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 91 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
92 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 92 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
93 "devicebuttons/ipaq_menu", 93 "devicebuttons/ipaq_menu",
94 "QPE/TaskBar", "toggleMenu()", 94 "QPE/TaskBar", "toggleMenu()",
95 "QPE/TaskBar", "toggleStartMenu()" }, 95 "QPE/TaskBar", "toggleStartMenu()" },
96 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 96 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
97 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 97 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
98 "devicebuttons/ipaq_mail", 98 "devicebuttons/ipaq_mail",
99 "mail", "raise()", 99 "mail", "raise()",
100 "mail", "newMail()" }, 100 "mail", "newMail()" },
101 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 101 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
102 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 102 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
103 "devicebuttons/ipaq_home", 103 "devicebuttons/ipaq_home",
104 "QPE/Launcher", "home()", 104 "QPE/Launcher", "home()",
105 "buttonsettings", "raise()" }, 105 "buttonsettings", "raise()" },
106 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 106 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
107 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 107 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
108 "devicebuttons/ipaq_record", 108 "devicebuttons/ipaq_record",
109 "QPE/VMemo", "toggleRecord()", 109 "QPE/VMemo", "toggleRecord()",
110 "sound", "raise()" }, 110 "sound", "raise()" },
111}; 111};
112 112
113void iPAQ::init() 113void iPAQ::init()
114{ 114{
115 d->m_vendorstr = "HP"; 115 d->m_vendorstr = "HP";
116 d->m_vendor = Vendor_HP; 116 d->m_vendor = Vendor_HP;
117 117
118 QFile f ( "/proc/hal/model" ); 118 QFile f ( "/proc/hal/model" );
119 119
120 if ( f. open ( IO_ReadOnly )) { 120 if ( f. open ( IO_ReadOnly )) {
121 QTextStream ts ( &f ); 121 QTextStream ts ( &f );
122 122
123 d->m_modelstr = "H" + ts. readLine(); 123 d->m_modelstr = "H" + ts. readLine();
124 124
125 if ( d->m_modelstr == "H3100" ) 125 if ( d->m_modelstr == "H3100" )
126 d->m_model = Model_iPAQ_H31xx; 126 d->m_model = Model_iPAQ_H31xx;
127 else if ( d->m_modelstr == "H3600" ) 127 else if ( d->m_modelstr == "H3600" )
128 d->m_model = Model_iPAQ_H36xx; 128 d->m_model = Model_iPAQ_H36xx;
129 else if ( d->m_modelstr == "H3700" ) 129 else if ( d->m_modelstr == "H3700" )
130 d->m_model = Model_iPAQ_H37xx; 130 d->m_model = Model_iPAQ_H37xx;
131 else if ( d->m_modelstr == "H3800" ) 131 else if ( d->m_modelstr == "H3800" )
132 d->m_model = Model_iPAQ_H38xx; 132 d->m_model = Model_iPAQ_H38xx;
133 else if ( d->m_modelstr == "H3900" ) 133 else if ( d->m_modelstr == "H3900" )
134 d->m_model = Model_iPAQ_H39xx; 134 d->m_model = Model_iPAQ_H39xx;
135 else if ( d->m_modelstr == "H5400" ) 135 else if ( d->m_modelstr == "H5400" )
136 d->m_model = Model_iPAQ_H5xxx; 136 d->m_model = Model_iPAQ_H5xxx;
137 else 137 else
138 d->m_model = Model_Unknown; 138 d->m_model = Model_Unknown;
139 139
140 f. close(); 140 f. close();
141 } 141 }
142 142
143 switch ( d->m_model ) { 143 switch ( d->m_model ) {
144 case Model_iPAQ_H31xx: 144 case Model_iPAQ_H31xx:
145 case Model_iPAQ_H38xx: 145 case Model_iPAQ_H38xx:
146 d->m_rotation = Rot90; 146 d->m_rotation = Rot90;
147 break; 147 break;
148 case Model_iPAQ_H36xx: 148 case Model_iPAQ_H36xx:
149 case Model_iPAQ_H37xx: 149 case Model_iPAQ_H37xx:
150 case Model_iPAQ_H39xx: 150 case Model_iPAQ_H39xx:
151 151
152 default: 152 default:
153 d->m_rotation = Rot270; 153 d->m_rotation = Rot270;
154 break; 154 break;
155 case Model_iPAQ_H5xxx: 155 case Model_iPAQ_H5xxx:
156 d->m_rotation = Rot0; 156 d->m_rotation = Rot0;
157 } 157 }
158 158
159 f. setName ( "/etc/familiar-version" ); 159 f. setName ( "/etc/familiar-version" );
160 if ( f. open ( IO_ReadOnly )) { 160 if ( f. open ( IO_ReadOnly )) {
161 d->m_systemstr = "Familiar"; 161 d->m_systemstr = "Familiar";
162 d->m_system = System_Familiar; 162 d->m_system = System_Familiar;
163 163
164 QTextStream ts ( &f ); 164 QTextStream ts ( &f );
165 d->m_sysverstr = ts. readLine(). mid ( 10 ); 165 d->m_sysverstr = ts. readLine(). mid ( 10 );
166 166
167 f. close(); 167 f. close();
168 } else { 168 } else {
169 f. setName ( "/etc/oz_version" ); 169 f. setName ( "/etc/oz_version" );
170 170
171 if ( f. open ( IO_ReadOnly )) { 171 if ( f. open ( IO_ReadOnly )) {
172 d->m_systemstr = "OpenEmbedded/iPaq"; 172 d->m_systemstr = "OpenEmbedded/iPaq";
173 d->m_system = System_Familiar; 173 d->m_system = System_Familiar;
174 174
175 QTextStream ts ( &f ); 175 QTextStream ts ( &f );
176 ts.setDevice ( &f ); 176 ts.setDevice ( &f );
177 d->m_sysverstr = ts. readLine(); 177 d->m_sysverstr = ts. readLine();
178 f. close(); 178 f. close();
179 } 179 }
180 } 180 }
181 181
182 m_leds [0] = m_leds [1] = Led_Off; 182 m_leds [0] = m_leds [1] = Led_Off;
183 183
184 m_power_timer = 0; 184 m_power_timer = 0;
185 185
186} 186}
187 187
188void iPAQ::initButtons() 188void iPAQ::initButtons()
189{ 189{
190 if ( d->m_buttons ) 190 if ( d->m_buttons )
191 return; 191 return;
192 192
193 if ( isQWS( ) ) 193 if ( isQWS( ) )
194 QWSServer::setKeyboardFilter ( this ); 194 QWSServer::setKeyboardFilter ( this );
195 195
196 d->m_buttons = new QValueList <ODeviceButton>; 196 d->m_buttons = new QValueList <ODeviceButton>;
197 197
198 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 198 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
199 i_button *ib = ipaq_buttons + i; 199 i_button *ib = ipaq_buttons + i;
200 ODeviceButton b; 200 ODeviceButton b;
201 201
202 if (( ib->model & d->m_model ) == d->m_model ) { 202 if (( ib->model & d->m_model ) == d->m_model ) {
203 b. setKeycode ( ib->code ); 203 b. setKeycode ( ib->code );
204 b. setUserText ( QObject::tr ( "Button", ib->utext )); 204 b. setUserText ( QObject::tr ( "Button", ib->utext ));
205 b. setPixmap ( Resource::loadPixmap ( ib->pix )); 205 b. setPixmap ( Resource::loadPixmap ( ib->pix ));
206 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); 206 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction ));
207 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); 207 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction ));
208 208
209 d->m_buttons->append ( b ); 209 d->m_buttons->append ( b );
210 } 210 }
211 } 211 }
212 reloadButtonMapping(); 212 reloadButtonMapping();
213 213
214 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 214 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
215 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 215 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
216} 216}
217 217
218QValueList <OLed> iPAQ::ledList() const 218QValueList <OLed> iPAQ::ledList() const
219{ 219{
220 QValueList <OLed> vl; 220 QValueList <OLed> vl;
221 vl << Led_Power; 221 vl << Led_Power;
222 222
223 if ( d->m_model == Model_iPAQ_H38xx ) 223 if ( d->m_model == Model_iPAQ_H38xx )
224 vl << Led_BlueTooth; 224 vl << Led_BlueTooth;
225 return vl; 225 return vl;
226} 226}
227 227
228QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 228QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
229{ 229{
230 QValueList <OLedState> vl; 230 QValueList <OLedState> vl;
231 231
232 if ( l == Led_Power ) 232 if ( l == Led_Power )
233 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 233 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
234 else if ( l == Led_BlueTooth && d->m_model == Model_iPAQ_H38xx ) 234 else if ( l == Led_BlueTooth && d->m_model == Model_iPAQ_H38xx )
235 vl << Led_Off; // << Led_On << ??? 235 vl << Led_Off; // << Led_On << ???
236 236
237 return vl; 237 return vl;
238} 238}
239 239
240OLedState iPAQ::ledState ( OLed l ) const 240OLedState iPAQ::ledState ( OLed l ) const
241{ 241{
242 switch ( l ) { 242 switch ( l ) {
243 case Led_Power: 243 case Led_Power:
244 return m_leds [0]; 244 return m_leds [0];
245 case Led_BlueTooth: 245 case Led_BlueTooth:
246 return m_leds [1]; 246 return m_leds [1];
247 default: 247 default:
248 return Led_Off; 248 return Led_Off;
249 } 249 }
250} 250}
251 251
252bool iPAQ::setLedState ( OLed l, OLedState st ) 252bool iPAQ::setLedState ( OLed l, OLedState st )
253{ 253{
254 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 254 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
255 255
256 if ( l == Led_Power ) { 256 if ( l == Led_Power ) {
257 if ( fd >= 0 ) { 257 if ( fd >= 0 ) {
258 LED_IN leds; 258 LED_IN leds;
259 ::memset ( &leds, 0, sizeof( leds )); 259 ::memset ( &leds, 0, sizeof( leds ));
260 leds. TotalTime = 0; 260 leds. TotalTime = 0;
261 leds. OnTime = 0; 261 leds. OnTime = 0;
262 leds. OffTime = 1; 262 leds. OffTime = 1;
263 leds. OffOnBlink = 2; 263 leds. OffOnBlink = 2;
264 264
265 switch ( st ) { 265 switch ( st ) {
266 case Led_Off : leds. OffOnBlink = 0; break; 266 case Led_Off : leds. OffOnBlink = 0; break;
267 case Led_On : leds. OffOnBlink = 1; break; 267 case Led_On : leds. OffOnBlink = 1; break;
268 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 268 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
269 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 269 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
270 } 270 }
271 271
272 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 272 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
273 m_leds [0] = st; 273 m_leds [0] = st;
274 return true; 274 return true;
275 } 275 }
276 } 276 }
277 } 277 }
278 return false; 278 return false;
279} 279}
280 280
281 281
282bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 282bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
283{ 283{
284 int newkeycode = keycode; 284 int newkeycode = keycode;
285 285
286 switch ( keycode ) { 286 switch ( keycode ) {
287 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 287 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
288 case HardKey_Menu: { 288 case HardKey_Menu: {
289 if (( d->m_model == Model_iPAQ_H38xx ) || 289 if (( d->m_model == Model_iPAQ_H38xx ) ||
290 ( d->m_model == Model_iPAQ_H39xx ) || 290 ( d->m_model == Model_iPAQ_H39xx ) ||
291 ( d->m_model == Model_iPAQ_H5xxx)) { 291 ( d->m_model == Model_iPAQ_H5xxx)) {
292 newkeycode = HardKey_Mail; 292 newkeycode = HardKey_Mail;
293 } 293 }
294 break; 294 break;
295 } 295 }
296 296
297 // Rotate cursor keys 180° 297 // Rotate cursor keys 180°
298 case Key_Left : 298 case Key_Left :
299 case Key_Right: 299 case Key_Right:
300 case Key_Up : 300 case Key_Up :
301 case Key_Down : { 301 case Key_Down : {
302 if (( d->m_model == Model_iPAQ_H31xx ) || 302 if (( d->m_model == Model_iPAQ_H31xx ) ||
303 ( d->m_model == Model_iPAQ_H38xx )) { 303 ( d->m_model == Model_iPAQ_H38xx )) {
304 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 304 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
305 } 305 }
306 break; 306 break;
307 } 307 }
308 308
309 // map Power Button short/long press to F34/F35 309 // map Power Button short/long press to F34/F35
310 case Key_SysReq: { 310 case Key_SysReq: {
311 if ( isPress ) { 311 if ( isPress ) {
312 if ( m_power_timer ) 312 if ( m_power_timer )
313 killTimer ( m_power_timer ); 313 killTimer ( m_power_timer );
314 m_power_timer = startTimer ( 500 ); 314 m_power_timer = startTimer ( 500 );
315 } 315 }
316 else if ( m_power_timer ) { 316 else if ( m_power_timer ) {
317 killTimer ( m_power_timer ); 317 killTimer ( m_power_timer );
318 m_power_timer = 0; 318 m_power_timer = 0;
319 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 319 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
320 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 320 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
321 } 321 }
322 newkeycode = Key_unknown; 322 newkeycode = Key_unknown;
323 break; 323 break;
324 } 324 }
325 } 325 }
326 326
327 if ( newkeycode != keycode ) { 327 if ( newkeycode != keycode ) {
328 if ( newkeycode != Key_unknown ) 328 if ( newkeycode != Key_unknown )
329 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 329 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
330 return true; 330 return true;
331 } 331 }
332 else 332 else
333 return false; 333 return false;
334} 334}
335 335
336void iPAQ::timerEvent ( QTimerEvent * ) 336void iPAQ::timerEvent ( QTimerEvent * )
337{ 337{
338 killTimer ( m_power_timer ); 338 killTimer ( m_power_timer );
339 m_power_timer = 0; 339 m_power_timer = 0;
340 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 340 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
341 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 341 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
342} 342}
343 343
344 344
345void iPAQ::alarmSound() 345void iPAQ::playAlarmSound()
346{ 346{
347#ifndef QT_NO_SOUND 347#ifndef QT_NO_SOUND
348 static Sound snd ( "alarm" ); 348 static Sound snd ( "alarm" );
349 int fd; 349 int fd;
350 int vol; 350 int vol;
351 bool vol_reset = false; 351 bool vol_reset = false;
352 352
353 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 353 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
354 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 354 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
355 Config cfg ( "qpe" ); 355 Config cfg ( "qpe" );
356 cfg. setGroup ( "Volume" ); 356 cfg. setGroup ( "Volume" );
357 357
358 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 358 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
359 if ( volalarm < 0 ) 359 if ( volalarm < 0 )
360 volalarm = 0; 360 volalarm = 0;
361 else if ( volalarm > 100 ) 361 else if ( volalarm > 100 )
362 volalarm = 100; 362 volalarm = 100;
363 volalarm |= ( volalarm << 8 ); 363 volalarm |= ( volalarm << 8 );
364 364
365 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 365 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
366 vol_reset = true; 366 vol_reset = true;
367 } 367 }
368 } 368 }
369 369
370 snd. play(); 370 snd. play();
371 while ( !snd. isFinished()) 371 while ( !snd. isFinished())
372 qApp->processEvents(); 372 qApp->processEvents();
373 373
374 if ( fd >= 0 ) { 374 if ( fd >= 0 ) {
375 if ( vol_reset ) 375 if ( vol_reset )
376 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 376 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
377 ::close ( fd ); 377 ::close ( fd );
378 } 378 }
379#endif 379#endif
380} 380}
381 381
382 382
383bool iPAQ::setSoftSuspend ( bool soft ) 383bool iPAQ::setSoftSuspend ( bool soft )
384{ 384{
385 bool res = false; 385 bool res = false;
386 int fd; 386 int fd;
387 387
388 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 388 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
389 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 389 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
390 res = true; 390 res = true;
391 else 391 else
392 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 392 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
393 393
394 ::close ( fd ); 394 ::close ( fd );
395 } 395 }
396 else 396 else
397 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 397 ::perror ( "/proc/sys/ts/suspend_button_mode" );
398 398
399 return res; 399 return res;
400} 400}
401 401
402 402
403bool iPAQ::setDisplayBrightness ( int bright ) 403bool iPAQ::setDisplayBrightness ( int bright )
404{ 404{
405 bool res = false; 405 bool res = false;
406 int fd; 406 int fd;
407 407
408 if ( bright > 255 ) 408 if ( bright > 255 )
409 bright = 255; 409 bright = 255;
410 if ( bright < 0 ) 410 if ( bright < 0 )
411 bright = 0; 411 bright = 0;
412 412
413 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) { 413 if (( fd = ::open ( "/dev/touchscreen/0", O_WRONLY )) >= 0 ) {
414 FLITE_IN bl; 414 FLITE_IN bl;
415 bl. mode = 1; 415 bl. mode = 1;
416 bl. pwr = bright ? 1 : 0; 416 bl. pwr = bright ? 1 : 0;
417 bl. brightness = ( bright * ( displayBrightnessResolution() - 1 ) + 127 ) / 255; 417 bl. brightness = ( bright * ( displayBrightnessResolution() - 1 ) + 127 ) / 255;
418 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 ); 418 res = ( ::ioctl ( fd, FLITE_ON, &bl ) == 0 );
419 ::close ( fd ); 419 ::close ( fd );
420 } 420 }
421 return res; 421 return res;
422} 422}
423 423
424int iPAQ::displayBrightnessResolution() const 424int iPAQ::displayBrightnessResolution() const
425{ 425{
426 switch ( model()) { 426 switch ( model()) {
427 case Model_iPAQ_H31xx: 427 case Model_iPAQ_H31xx:
428 case Model_iPAQ_H36xx: 428 case Model_iPAQ_H36xx:
429 case Model_iPAQ_H37xx: 429 case Model_iPAQ_H37xx:
430 return 128; // really 256, but >128 could damage the LCD 430 return 128; // really 256, but >128 could damage the LCD
431 431
432 case Model_iPAQ_H38xx: 432 case Model_iPAQ_H38xx:
433 case Model_iPAQ_H39xx: 433 case Model_iPAQ_H39xx:
434 return 64; 434 return 64;
435 case Model_iPAQ_H5xxx: 435 case Model_iPAQ_H5xxx:
436 return 255; 436 return 255;
437 437
438 default: 438 default:
439 return 2; 439 return 2;
440 } 440 }
441} 441}
442 442
443 443
444bool iPAQ::hasLightSensor() const 444bool iPAQ::hasLightSensor() const
445{ 445{
446 return true; 446 return true;
447} 447}
448 448
449int iPAQ::readLightSensor() 449int iPAQ::readLightSensor()
450{ 450{
451 int fd; 451 int fd;
452 int val = -1; 452 int val = -1;
453 453
454 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 454 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
455 char buffer [8]; 455 char buffer [8];
456 456
457 if ( ::read ( fd, buffer, 5 ) == 5 ) { 457 if ( ::read ( fd, buffer, 5 ) == 5 ) {
458 char *endptr; 458 char *endptr;
459 459
460 buffer [4] = 0; 460 buffer [4] = 0;
461 val = ::strtol ( buffer + 2, &endptr, 16 ); 461 val = ::strtol ( buffer + 2, &endptr, 16 );
462 462
463 if ( *endptr != 0 ) 463 if ( *endptr != 0 )
464 val = -1; 464 val = -1;
465 } 465 }
466 ::close ( fd ); 466 ::close ( fd );
467 } 467 }
468 468
469 return val; 469 return val;
470} 470}
471 471
472int iPAQ::lightSensorResolution() const 472int iPAQ::lightSensorResolution() const
473{ 473{
474 return 256; 474 return 256;
475} 475}
diff --git a/libopie2/opiecore/device/odevice_ipaq.h b/libopie2/opiecore/device/odevice_ipaq.h
index baf7215..f512344 100644
--- a/libopie2/opiecore/device/odevice_ipaq.h
+++ b/libopie2/opiecore/device/odevice_ipaq.h
@@ -1,84 +1,84 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#ifndef ODEVICE_IPAQ 30#ifndef ODEVICE_IPAQ
31#define ODEVICE_IPAQ 31#define ODEVICE_IPAQ
32 32
33#include "odevice.h" 33#include "odevice.h"
34 34
35/* QT */ 35/* QT */
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
37 37
38using namespace Opie; 38using namespace Opie;
39 39
40class iPAQ : public ODevice, public QWSServer::KeyboardFilter 40class iPAQ : public ODevice, public QWSServer::KeyboardFilter
41{ 41{
42 42
43 protected: 43 protected:
44 virtual void init(); 44 virtual void init();
45 virtual void initButtons(); 45 virtual void initButtons();
46 46
47 public: 47 public:
48 virtual bool setSoftSuspend( bool soft ); 48 virtual bool setSoftSuspend( bool soft );
49 49
50 virtual bool setDisplayBrightness( int b ); 50 virtual bool setDisplayBrightness( int b );
51 virtual int displayBrightnessResolution() const; 51 virtual int displayBrightnessResolution() const;
52 52
53 virtual void alarmSound(); 53 virtual void playAlarmSound();
54 54
55 virtual QValueList <OLed> ledList() const; 55 virtual QValueList <OLed> ledList() const;
56 virtual QValueList <OLedState> ledStateList( OLed led ) const; 56 virtual QValueList <OLedState> ledStateList( OLed led ) const;
57 virtual OLedState ledState( OLed led ) const; 57 virtual OLedState ledState( OLed led ) const;
58 virtual bool setLedState( OLed led, OLedState st ); 58 virtual bool setLedState( OLed led, OLedState st );
59 59
60 virtual bool hasLightSensor() const; 60 virtual bool hasLightSensor() const;
61 virtual int readLightSensor(); 61 virtual int readLightSensor();
62 virtual int lightSensorResolution() const; 62 virtual int lightSensorResolution() const;
63 63
64 protected: 64 protected:
65 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 65 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
66 virtual void timerEvent( QTimerEvent *te ); 66 virtual void timerEvent( QTimerEvent *te );
67 67
68 int m_power_timer; 68 int m_power_timer;
69 69
70 OLedState m_leds [2]; 70 OLedState m_leds [2];
71}; 71};
72 72
73struct i_button { 73struct i_button {
74 uint model; 74 uint model;
75 Qt::Key code; 75 Qt::Key code;
76 char *utext; 76 char *utext;
77 char *pix; 77 char *pix;
78 char *fpressedservice; 78 char *fpressedservice;
79 char *fpressedaction; 79 char *fpressedaction;
80 char *fheldservice; 80 char *fheldservice;
81 char *fheldaction; 81 char *fheldaction;
82}; 82};
83 83
84#endif 84#endif
diff --git a/libopie2/opiecore/device/odevice_simpad.cpp b/libopie2/opiecore/device/odevice_simpad.cpp
index a2cd419..4397b78 100644
--- a/libopie2/opiecore/device/odevice_simpad.cpp
+++ b/libopie2/opiecore/device/odevice_simpad.cpp
@@ -1,391 +1,391 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#include "odevice_simpad.h" 30#include "odevice_simpad.h"
31 31
32/* QT */ 32/* QT */
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qfile.h> 34#include <qfile.h>
35#include <qtextstream.h> 35#include <qtextstream.h>
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
37 37
38/* OPIE */ 38/* OPIE */
39#include <qpe/config.h> 39#include <qpe/config.h>
40#include <qpe/resource.h> 40#include <qpe/resource.h>
41#include <qpe/sound.h> 41#include <qpe/sound.h>
42#include <qpe/qcopenvelope_qws.h> 42#include <qpe/qcopenvelope_qws.h>
43 43
44/* STD */ 44/* STD */
45#include <fcntl.h> 45#include <fcntl.h>
46#include <math.h> 46#include <math.h>
47#include <stdlib.h> 47#include <stdlib.h>
48#include <signal.h> 48#include <signal.h>
49#include <sys/ioctl.h> 49#include <sys/ioctl.h>
50#include <sys/time.h> 50#include <sys/time.h>
51#include <unistd.h> 51#include <unistd.h>
52#ifndef QT_NO_SOUND 52#ifndef QT_NO_SOUND
53#include <linux/soundcard.h> 53#include <linux/soundcard.h>
54#endif 54#endif
55 55
56using namespace Opie; 56using namespace Opie;
57 57
58struct s_button simpad_buttons [] = { 58struct s_button simpad_buttons [] = {
59 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 59 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
60 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"), 60 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"),
61 "devicebuttons/simpad_lower_up", 61 "devicebuttons/simpad_lower_up",
62 "datebook", "nextView()", 62 "datebook", "nextView()",
63 "today", "raise()" }, 63 "today", "raise()" },
64 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 64 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
65 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"), 65 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"),
66 "devicebuttons/simpad_lower_down", 66 "devicebuttons/simpad_lower_down",
67 "addressbook", "raise()", 67 "addressbook", "raise()",
68 "addressbook", "beamBusinessCard()" }, 68 "addressbook", "beamBusinessCard()" },
69 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 69 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
70 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"), 70 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"),
71 "devicebuttons/simpad_lower_right", 71 "devicebuttons/simpad_lower_right",
72 "QPE/TaskBar", "toggleMenu()", 72 "QPE/TaskBar", "toggleMenu()",
73 "QPE/TaskBar", "toggleStartMenu()" }, 73 "QPE/TaskBar", "toggleStartMenu()" },
74 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 74 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
75 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"), 75 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"),
76 "devicebuttons/simpad_lower_left", 76 "devicebuttons/simpad_lower_left",
77 "mail", "raise()", 77 "mail", "raise()",
78 "mail", "newMail()" }, 78 "mail", "newMail()" },
79 79
80 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 80 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
81 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"), 81 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"),
82 "devicebuttons/simpad_upper_up", 82 "devicebuttons/simpad_upper_up",
83 "QPE/Launcher", "home()", 83 "QPE/Launcher", "home()",
84 "buttonsettings", "raise()" }, 84 "buttonsettings", "raise()" },
85 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 85 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
86 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"), 86 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"),
87 "devicebuttons/simpad_upper_down", 87 "devicebuttons/simpad_upper_down",
88 "addressbook", "raise()", 88 "addressbook", "raise()",
89 "addressbook", "beamBusinessCard()" }, 89 "addressbook", "beamBusinessCard()" },
90 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 90 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
91 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"), 91 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"),
92 "devicebuttons/simpad_upper_right", 92 "devicebuttons/simpad_upper_right",
93 "QPE/TaskBar", "toggleMenu()", 93 "QPE/TaskBar", "toggleMenu()",
94 "QPE/TaskBar", "toggleStartMenu()" }, 94 "QPE/TaskBar", "toggleStartMenu()" },
95 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 95 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
96 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"), 96 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"),
97 "devicebuttons/simpad_upper_left", 97 "devicebuttons/simpad_upper_left",
98 "QPE/Rotation", "flip()", 98 "QPE/Rotation", "flip()",
99 "QPE/Rotation", "flip()" }, 99 "QPE/Rotation", "flip()" },
100 /* 100 /*
101 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 101 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
102 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 102 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
103 "devicebuttons/simpad_lower_upper", 103 "devicebuttons/simpad_lower_upper",
104 "QPE/Launcher", "home()", 104 "QPE/Launcher", "home()",
105 "buttonsettings", "raise()" }, 105 "buttonsettings", "raise()" },
106 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 106 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
107 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 107 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
108 "devicebuttons/simpad_upper_lower", 108 "devicebuttons/simpad_upper_lower",
109 "QPE/Launcher", "home()", 109 "QPE/Launcher", "home()",
110 "buttonsettings", "raise()" }, 110 "buttonsettings", "raise()" },
111 */ 111 */
112}; 112};
113 113
114void SIMpad::init() 114void SIMpad::init()
115{ 115{
116 d->m_vendorstr = "SIEMENS"; 116 d->m_vendorstr = "SIEMENS";
117 d->m_vendor = Vendor_SIEMENS; 117 d->m_vendor = Vendor_SIEMENS;
118 118
119 QFile f ( "/proc/hal/model" ); 119 QFile f ( "/proc/hal/model" );
120 120
121 //TODO Implement model checking 121 //TODO Implement model checking
122 //FIXME For now we assume an SL4 122 //FIXME For now we assume an SL4
123 123
124 d->m_modelstr = "SL4"; 124 d->m_modelstr = "SL4";
125 d->m_model = Model_SIMpad_SL4; 125 d->m_model = Model_SIMpad_SL4;
126 126
127 switch ( d->m_model ) { 127 switch ( d->m_model ) {
128 default: 128 default:
129 d->m_rotation = Rot0; 129 d->m_rotation = Rot0;
130 d->m_direction = CCW; 130 d->m_direction = CCW;
131 d->m_holdtime = 1000; // 1000ms 131 d->m_holdtime = 1000; // 1000ms
132 132
133 break; 133 break;
134 } 134 }
135 135
136 f. setName ( "/etc/familiar-version" ); 136 f. setName ( "/etc/familiar-version" );
137 if ( f. open ( IO_ReadOnly )) { 137 if ( f. open ( IO_ReadOnly )) {
138 d->m_systemstr = "Familiar"; 138 d->m_systemstr = "Familiar";
139 d->m_system = System_Familiar; 139 d->m_system = System_Familiar;
140 140
141 QTextStream ts ( &f ); 141 QTextStream ts ( &f );
142 d->m_sysverstr = ts. readLine(). mid ( 10 ); 142 d->m_sysverstr = ts. readLine(). mid ( 10 );
143 143
144 f. close(); 144 f. close();
145 } else { 145 } else {
146 f. setName ( "/etc/oz_version" ); 146 f. setName ( "/etc/oz_version" );
147 147
148 if ( f. open ( IO_ReadOnly )) { 148 if ( f. open ( IO_ReadOnly )) {
149 d->m_systemstr = "OpenEmbedded/SIMpad"; 149 d->m_systemstr = "OpenEmbedded/SIMpad";
150 d->m_system = System_OpenZaurus; 150 d->m_system = System_OpenZaurus;
151 151
152 QTextStream ts ( &f ); 152 QTextStream ts ( &f );
153 ts.setDevice ( &f ); 153 ts.setDevice ( &f );
154 d->m_sysverstr = ts. readLine(); 154 d->m_sysverstr = ts. readLine();
155 f. close(); 155 f. close();
156 } 156 }
157 } 157 }
158 158
159 m_leds [0] = m_leds [1] = Led_Off; 159 m_leds [0] = m_leds [1] = Led_Off;
160 160
161 m_power_timer = 0; 161 m_power_timer = 0;
162 162
163} 163}
164 164
165void SIMpad::initButtons() 165void SIMpad::initButtons()
166{ 166{
167 if ( d->m_buttons ) 167 if ( d->m_buttons )
168 return; 168 return;
169 169
170 if ( isQWS( ) ) 170 if ( isQWS( ) )
171 QWSServer::setKeyboardFilter ( this ); 171 QWSServer::setKeyboardFilter ( this );
172 172
173 d->m_buttons = new QValueList <ODeviceButton>; 173 d->m_buttons = new QValueList <ODeviceButton>;
174 174
175 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) { 175 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) {
176 s_button *sb = simpad_buttons + i; 176 s_button *sb = simpad_buttons + i;
177 ODeviceButton b; 177 ODeviceButton b;
178 178
179 if (( sb->model & d->m_model ) == d->m_model ) { 179 if (( sb->model & d->m_model ) == d->m_model ) {
180 b. setKeycode ( sb->code ); 180 b. setKeycode ( sb->code );
181 b. setUserText ( QObject::tr ( "Button", sb->utext )); 181 b. setUserText ( QObject::tr ( "Button", sb->utext ));
182 b. setPixmap ( Resource::loadPixmap ( sb->pix )); 182 b. setPixmap ( Resource::loadPixmap ( sb->pix ));
183 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb->fpressedservice ), sb->fpressedaction )); 183 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb->fpressedservice ), sb->fpressedaction ));
184 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb->fheldservice ), sb->fheldaction )); 184 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb->fheldservice ), sb->fheldaction ));
185 185
186 d->m_buttons->append ( b ); 186 d->m_buttons->append ( b );
187 } 187 }
188 } 188 }
189 reloadButtonMapping(); 189 reloadButtonMapping();
190 190
191 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 191 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
192 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 192 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
193} 193}
194 194
195// SIMpad boardcontrol register CS3 195// SIMpad boardcontrol register CS3
196#define SIMPAD_BOARDCONTROL "/proc/cs3" 196#define SIMPAD_BOARDCONTROL "/proc/cs3"
197#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA 197#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA
198#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA 198#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA
199#define SIMPAD_EN1 0x0004 // This is only for EPROM's 199#define SIMPAD_EN1 0x0004 // This is only for EPROM's
200#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V 200#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V
201#define SIMPAD_DISPLAY_ON 0x0010 201#define SIMPAD_DISPLAY_ON 0x0010
202#define SIMPAD_PCMCIA_BUFF_DIS 0x0020 202#define SIMPAD_PCMCIA_BUFF_DIS 0x0020
203#define SIMPAD_MQ_RESET 0x0040 203#define SIMPAD_MQ_RESET 0x0040
204#define SIMPAD_PCMCIA_RESET 0x0080 204#define SIMPAD_PCMCIA_RESET 0x0080
205#define SIMPAD_DECT_POWER_ON 0x0100 205#define SIMPAD_DECT_POWER_ON 0x0100
206#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave 206#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave
207#define SIMPAD_RS232_ON 0x0400 207#define SIMPAD_RS232_ON 0x0400
208#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave 208#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave
209#define SIMPAD_LED2_ON 0x1000 209#define SIMPAD_LED2_ON 0x1000
210#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode 210#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode
211#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit 211#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit
212#define SIMPAD_RESET_SIMCARD 0x8000 212#define SIMPAD_RESET_SIMCARD 0x8000
213 213
214//SIMpad touchscreen backlight strength control 214//SIMpad touchscreen backlight strength control
215#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL" 215#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL"
216#define SIMPAD_BACKLIGHT_MASK 0x00a10044 216#define SIMPAD_BACKLIGHT_MASK 0x00a10044
217 217
218QValueList <OLed> SIMpad::ledList() const 218QValueList <OLed> SIMpad::ledList() const
219{ 219{
220 QValueList <OLed> vl; 220 QValueList <OLed> vl;
221 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one? 221 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one?
222 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway 222 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway
223 return vl; 223 return vl;
224} 224}
225 225
226QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const 226QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const
227{ 227{
228 QValueList <OLedState> vl; 228 QValueList <OLedState> vl;
229 229
230 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one? 230 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one?
231 vl << Led_Off << Led_On; 231 vl << Led_Off << Led_On;
232 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway 232 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway
233 //vl << Led_Off; 233 //vl << Led_Off;
234 return vl; 234 return vl;
235} 235}
236 236
237OLedState SIMpad::ledState ( OLed l ) const 237OLedState SIMpad::ledState ( OLed l ) const
238{ 238{
239 switch ( l ) { 239 switch ( l ) {
240 case Led_Power: 240 case Led_Power:
241 return m_leds [0]; 241 return m_leds [0];
242 //case Led_Mail: 242 //case Led_Mail:
243 //return m_leds [1]; 243 //return m_leds [1];
244 default: 244 default:
245 return Led_Off; 245 return Led_Off;
246 } 246 }
247} 247}
248 248
249bool SIMpad::setLedState ( OLed l, OLedState st ) 249bool SIMpad::setLedState ( OLed l, OLedState st )
250{ 250{
251#if 0 251#if 0
252 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK ); 252 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK );
253 253
254 /*TODO Implement this like that: 254 /*TODO Implement this like that:
255 read from cs3 255 read from cs3
256 && with SIMPAD_LED2_ON 256 && with SIMPAD_LED2_ON
257 write to cs3 */ 257 write to cs3 */
258 m_leds [0] = st; 258 m_leds [0] = st;
259 return true; 259 return true;
260 } 260 }
261 } 261 }
262 } 262 }
263 263
264#endif 264#endif
265 return false; 265 return false;
266} 266}
267 267
268 268
269bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 269bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
270{ 270{
271 //TODO 271 //TODO
272 return false; 272 return false;
273} 273}
274 274
275void SIMpad::timerEvent ( QTimerEvent * ) 275void SIMpad::timerEvent ( QTimerEvent * )
276{ 276{
277 killTimer ( m_power_timer ); 277 killTimer ( m_power_timer );
278 m_power_timer = 0; 278 m_power_timer = 0;
279 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 279 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
280 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 280 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
281} 281}
282 282
283 283
284void SIMpad::alarmSound() 284void SIMpad::playAlarmSound()
285{ 285{
286#ifndef QT_NO_SOUND 286#ifndef QT_NO_SOUND
287 static Sound snd ( "alarm" ); 287 static Sound snd ( "alarm" );
288 int fd; 288 int fd;
289 int vol; 289 int vol;
290 bool vol_reset = false; 290 bool vol_reset = false;
291 291
292 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 292 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
293 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 293 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
294 Config cfg ( "qpe" ); 294 Config cfg ( "qpe" );
295 cfg. setGroup ( "Volume" ); 295 cfg. setGroup ( "Volume" );
296 296
297 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 297 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
298 if ( volalarm < 0 ) 298 if ( volalarm < 0 )
299 volalarm = 0; 299 volalarm = 0;
300 else if ( volalarm > 100 ) 300 else if ( volalarm > 100 )
301 volalarm = 100; 301 volalarm = 100;
302 volalarm |= ( volalarm << 8 ); 302 volalarm |= ( volalarm << 8 );
303 303
304 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 304 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
305 vol_reset = true; 305 vol_reset = true;
306 } 306 }
307 } 307 }
308 308
309 snd. play(); 309 snd. play();
310 while ( !snd. isFinished()) 310 while ( !snd. isFinished())
311 qApp->processEvents(); 311 qApp->processEvents();
312 312
313 if ( fd >= 0 ) { 313 if ( fd >= 0 ) {
314 if ( vol_reset ) 314 if ( vol_reset )
315 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 315 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
316 ::close ( fd ); 316 ::close ( fd );
317 } 317 }
318#endif 318#endif
319} 319}
320 320
321 321
322bool SIMpad::suspend() // Must override because SIMpad does NOT have apm 322bool SIMpad::suspend() // Must override because SIMpad does NOT have apm
323{ 323{
324 qDebug( "ODevice for SIMpad: suspend()" ); 324 qDebug( "ODevice for SIMpad: suspend()" );
325 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 325 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
326 return false; 326 return false;
327 327
328 bool res = false; 328 bool res = false;
329 329
330 struct timeval tvs, tvn; 330 struct timeval tvs, tvn;
331 ::gettimeofday ( &tvs, 0 ); 331 ::gettimeofday ( &tvs, 0 );
332 332
333 ::sync(); // flush fs caches 333 ::sync(); // flush fs caches
334 res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :) 334 res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :)
335 335
336 return res; 336 return res;
337} 337}
338 338
339 339
340bool SIMpad::setSoftSuspend ( bool soft ) 340bool SIMpad::setSoftSuspend ( bool soft )
341{ 341{
342 qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" ); 342 qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" );
343 return false; 343 return false;
344} 344}
345 345
346 346
347bool SIMpad::setDisplayStatus ( bool on ) 347bool SIMpad::setDisplayStatus ( bool on )
348{ 348{
349 qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" ); 349 qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" );
350 350
351 bool res = false; 351 bool res = false;
352 int fd; 352 int fd;
353 353
354 QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :) 354 QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :)
355 355
356 res = ( ::system( (const char*) cmdline ) == 0 ); 356 res = ( ::system( (const char*) cmdline ) == 0 );
357 357
358 return res; 358 return res;
359} 359}
360 360
361 361
362bool SIMpad::setDisplayBrightness ( int bright ) 362bool SIMpad::setDisplayBrightness ( int bright )
363{ 363{
364 qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright ); 364 qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright );
365 bool res = false; 365 bool res = false;
366 int fd; 366 int fd;
367 367
368 if ( bright > 255 ) 368 if ( bright > 255 )
369 bright = 255; 369 bright = 255;
370 if ( bright < 1 ) 370 if ( bright < 1 )
371 bright = 0; 371 bright = 0;
372 372
373 if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) { 373 if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) {
374 int value = 255 - bright; 374 int value = 255 - bright;
375 const int mask = SIMPAD_BACKLIGHT_MASK; 375 const int mask = SIMPAD_BACKLIGHT_MASK;
376 value = value << 8; 376 value = value << 8;
377 value += mask; 377 value += mask;
378 char writeCommand[100]; 378 char writeCommand[100];
379 const int count = sprintf( writeCommand, "0x%x\n", value ); 379 const int count = sprintf( writeCommand, "0x%x\n", value );
380 res = ( ::write ( fd, writeCommand, count ) != -1 ); 380 res = ( ::write ( fd, writeCommand, count ) != -1 );
381 ::close ( fd ); 381 ::close ( fd );
382 } 382 }
383 return res; 383 return res;
384} 384}
385 385
386 386
387int SIMpad::displayBrightnessResolution() const 387int SIMpad::displayBrightnessResolution() const
388{ 388{
389 return 255; // All SIMpad models share the same display 389 return 255; // All SIMpad models share the same display
390} 390}
391 391
diff --git a/libopie2/opiecore/device/odevice_simpad.h b/libopie2/opiecore/device/odevice_simpad.h
index 615effc..3287ee8 100644
--- a/libopie2/opiecore/device/odevice_simpad.h
+++ b/libopie2/opiecore/device/odevice_simpad.h
@@ -1,81 +1,81 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#ifndef ODEVICE_SIMPAD 30#ifndef ODEVICE_SIMPAD
31#define ODEVICE_SIMPAD 31#define ODEVICE_SIMPAD
32 32
33#include <opie2/odevice.h> 33#include <opie2/odevice.h>
34 34
35/* QT */ 35/* QT */
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
37 37
38using namespace Opie; 38using namespace Opie;
39 39
40class SIMpad : public ODevice, public QWSServer::KeyboardFilter 40class SIMpad : public ODevice, public QWSServer::KeyboardFilter
41{ 41{
42 protected: 42 protected:
43 virtual void init(); 43 virtual void init();
44 virtual void initButtons(); 44 virtual void initButtons();
45 45
46 public: 46 public:
47 virtual bool setSoftSuspend( bool soft ); 47 virtual bool setSoftSuspend( bool soft );
48 virtual bool suspend(); 48 virtual bool suspend();
49 49
50 virtual bool setDisplayStatus( bool on ); 50 virtual bool setDisplayStatus( bool on );
51 virtual bool setDisplayBrightness( int b ); 51 virtual bool setDisplayBrightness( int b );
52 virtual int displayBrightnessResolution() const; 52 virtual int displayBrightnessResolution() const;
53 53
54 virtual void alarmSound(); 54 virtual void playAlarmSound();
55 55
56 virtual QValueList <OLed> ledList() const; 56 virtual QValueList <OLed> ledList() const;
57 virtual QValueList <OLedState> ledStateList( OLed led ) const; 57 virtual QValueList <OLedState> ledStateList( OLed led ) const;
58 virtual OLedState ledState( OLed led ) const; 58 virtual OLedState ledState( OLed led ) const;
59 virtual bool setLedState( OLed led, OLedState st ); 59 virtual bool setLedState( OLed led, OLedState st );
60 60
61 protected: 61 protected:
62 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 62 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
63 virtual void timerEvent( QTimerEvent *te ); 63 virtual void timerEvent( QTimerEvent *te );
64 64
65 int m_power_timer; 65 int m_power_timer;
66 66
67 OLedState m_leds [1]; 67 OLedState m_leds [1];
68}; 68};
69 69
70struct s_button { 70struct s_button {
71 uint model; 71 uint model;
72 Qt::Key code; 72 Qt::Key code;
73 char *utext; 73 char *utext;
74 char *pix; 74 char *pix;
75 char *fpressedservice; 75 char *fpressedservice;
76 char *fpressedaction; 76 char *fpressedaction;
77 char *fheldservice; 77 char *fheldservice;
78 char *fheldaction; 78 char *fheldaction;
79}; 79};
80 80
81#endif 81#endif
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index 78bc62e..8bff770 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -18,674 +18,674 @@
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#include "odevice_zaurus.h" 30#include "odevice_zaurus.h"
31 31
32/* QT */ 32/* QT */
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qfile.h> 34#include <qfile.h>
35#include <qtextstream.h> 35#include <qtextstream.h>
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
37 37
38/* OPIE */ 38/* OPIE */
39#include <qpe/config.h> 39#include <qpe/config.h>
40#include <qpe/resource.h> 40#include <qpe/resource.h>
41#include <qpe/sound.h> 41#include <qpe/sound.h>
42#include <qpe/qcopenvelope_qws.h> 42#include <qpe/qcopenvelope_qws.h>
43 43
44/* STD */ 44/* STD */
45#include <fcntl.h> 45#include <fcntl.h>
46#include <math.h> 46#include <math.h>
47#include <stdlib.h> 47#include <stdlib.h>
48#include <signal.h> 48#include <signal.h>
49#include <sys/ioctl.h> 49#include <sys/ioctl.h>
50#include <sys/time.h> 50#include <sys/time.h>
51#include <unistd.h> 51#include <unistd.h>
52#ifndef QT_NO_SOUND 52#ifndef QT_NO_SOUND
53#include <linux/soundcard.h> 53#include <linux/soundcard.h>
54#endif 54#endif
55 55
56using namespace Opie; 56using namespace Opie;
57 57
58struct z_button z_buttons [] = { 58struct z_button z_buttons [] = {
59 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 59 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
60 "devicebuttons/z_calendar", 60 "devicebuttons/z_calendar",
61 "datebook", "nextView()", 61 "datebook", "nextView()",
62 "today", "raise()" }, 62 "today", "raise()" },
63 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 63 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
64 "devicebuttons/z_contact", 64 "devicebuttons/z_contact",
65 "addressbook", "raise()", 65 "addressbook", "raise()",
66 "addressbook", "beamBusinessCard()" }, 66 "addressbook", "beamBusinessCard()" },
67 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 67 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
68 "devicebuttons/z_home", 68 "devicebuttons/z_home",
69 "QPE/Launcher", "home()", 69 "QPE/Launcher", "home()",
70 "buttonsettings", "raise()" }, 70 "buttonsettings", "raise()" },
71 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 71 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
72 "devicebuttons/z_menu", 72 "devicebuttons/z_menu",
73 "QPE/TaskBar", "toggleMenu()", 73 "QPE/TaskBar", "toggleMenu()",
74 "QPE/TaskBar", "toggleStartMenu()" }, 74 "QPE/TaskBar", "toggleStartMenu()" },
75 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 75 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
76 "devicebuttons/z_mail", 76 "devicebuttons/z_mail",
77 "mail", "raise()", 77 "mail", "raise()",
78 "mail", "newMail()" }, 78 "mail", "newMail()" },
79}; 79};
80 80
81struct z_button z_buttons_c700 [] = { 81struct z_button z_buttons_c700 [] = {
82 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 82 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
83 "devicebuttons/z_calendar", 83 "devicebuttons/z_calendar",
84 "datebook", "nextView()", 84 "datebook", "nextView()",
85 "today", "raise()" }, 85 "today", "raise()" },
86 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 86 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
87 "devicebuttons/z_contact", 87 "devicebuttons/z_contact",
88 "addressbook", "raise()", 88 "addressbook", "raise()",
89 "addressbook", "beamBusinessCard()" }, 89 "addressbook", "beamBusinessCard()" },
90 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 90 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
91 "devicebuttons/z_home", 91 "devicebuttons/z_home",
92 "QPE/Launcher", "home()", 92 "QPE/Launcher", "home()",
93 "buttonsettings", "raise()" }, 93 "buttonsettings", "raise()" },
94 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 94 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
95 "devicebuttons/z_menu", 95 "devicebuttons/z_menu",
96 "QPE/TaskBar", "toggleMenu()", 96 "QPE/TaskBar", "toggleMenu()",
97 "QPE/TaskBar", "toggleStartMenu()" }, 97 "QPE/TaskBar", "toggleStartMenu()" },
98 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 98 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"),
99 "devicebuttons/z_hinge", 99 "devicebuttons/z_hinge",
100 "QPE/Rotation", "rotateDefault()", 100 "QPE/Rotation", "rotateDefault()",
101 "QPE/Dummy", "doNothing()" }, 101 "QPE/Dummy", "doNothing()" },
102}; 102};
103 103
104// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 104// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
105// class up into individual classes. We need three classes 105// class up into individual classes. We need three classes
106// 106//
107// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 107// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
108// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 108// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
109// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) 109// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860)
110// 110//
111// Only question right now is: Do we really need to do it? Because as soon 111// Only question right now is: Do we really need to do it? Because as soon
112// as the OpenZaurus kernel is ready, there will be a unified interface for all 112// as the OpenZaurus kernel is ready, there will be a unified interface for all
113// Zaurus models (concerning apm, backlight, buttons, etc.) 113// Zaurus models (concerning apm, backlight, buttons, etc.)
114// 114//
115// Comments? - mickeyl. 115// Comments? - mickeyl.
116 116
117void Zaurus::init() 117void Zaurus::init()
118{ 118{
119 d->m_vendorstr = "Sharp"; 119 d->m_vendorstr = "Sharp";
120 d->m_vendor = Vendor_Sharp; 120 d->m_vendor = Vendor_Sharp;
121 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 121 m_embedix = true; // Not openzaurus means: It has an embedix kernel !
122 122
123 // QFile f ( "/proc/filesystems" ); 123 // QFile f ( "/proc/filesystems" );
124 QString model; 124 QString model;
125 125
126 // It isn't a good idea to check the system configuration to 126 // It isn't a good idea to check the system configuration to
127 // detect the distribution ! 127 // detect the distribution !
128 // Otherwise it may happen that any other distribution is detected as openzaurus, just 128 // Otherwise it may happen that any other distribution is detected as openzaurus, just
129 // because it uses a jffs2 filesystem.. 129 // because it uses a jffs2 filesystem..
130 // (eilers) 130 // (eilers)
131 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read(). find ( "\tjffs2\n" ) >= 0 )) { 131 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read(). find ( "\tjffs2\n" ) >= 0 )) {
132 QFile f ("/etc/oz_version"); 132 QFile f ("/etc/oz_version");
133 if ( f.exists() ){ 133 if ( f.exists() ){
134 d->m_vendorstr = "OpenZaurus Team"; 134 d->m_vendorstr = "OpenZaurus Team";
135 d->m_systemstr = "OpenZaurus"; 135 d->m_systemstr = "OpenZaurus";
136 d->m_system = System_OpenZaurus; 136 d->m_system = System_OpenZaurus;
137 137
138 if ( f. open ( IO_ReadOnly )) { 138 if ( f. open ( IO_ReadOnly )) {
139 QTextStream ts ( &f ); 139 QTextStream ts ( &f );
140 d->m_sysverstr = ts. readLine();//. mid ( 10 ); 140 d->m_sysverstr = ts. readLine();//. mid ( 10 );
141 f. close(); 141 f. close();
142 } 142 }
143 143
144 // Openzaurus sometimes uses the embedix kernel! 144 // Openzaurus sometimes uses the embedix kernel!
145 // => Check whether this is an embedix kernel 145 // => Check whether this is an embedix kernel
146 FILE *uname = popen("uname -r", "r"); 146 FILE *uname = popen("uname -r", "r");
147 QString line; 147 QString line;
148 if ( f.open(IO_ReadOnly, uname) ) { 148 if ( f.open(IO_ReadOnly, uname) ) {
149 QTextStream ts ( &f ); 149 QTextStream ts ( &f );
150 line = ts. readLine(); 150 line = ts. readLine();
151 int loc = line. find ( "embedix" ); 151 int loc = line. find ( "embedix" );
152 if ( loc != -1 ) 152 if ( loc != -1 )
153 m_embedix = true; 153 m_embedix = true;
154 else 154 else
155 m_embedix = false; 155 m_embedix = false;
156 f. close(); 156 f. close();
157 } 157 }
158 pclose(uname); 158 pclose(uname);
159 } 159 }
160 else { 160 else {
161 d->m_systemstr = "Zaurus"; 161 d->m_systemstr = "Zaurus";
162 d->m_system = System_Zaurus; 162 d->m_system = System_Zaurus;
163 } 163 }
164 164
165 f. setName ( "/proc/cpuinfo" ); 165 f. setName ( "/proc/cpuinfo" );
166 if ( f. open ( IO_ReadOnly ) ) { 166 if ( f. open ( IO_ReadOnly ) ) {
167 QTextStream ts ( &f ); 167 QTextStream ts ( &f );
168 QString line; 168 QString line;
169 while( line = ts. readLine() ) { 169 while( line = ts. readLine() ) {
170 if ( line. left ( 8 ) == "Hardware" ) 170 if ( line. left ( 8 ) == "Hardware" )
171 break; 171 break;
172 } 172 }
173 int loc = line. find ( ":" ); 173 int loc = line. find ( ":" );
174 if ( loc != -1 ) 174 if ( loc != -1 )
175 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 175 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
176 } 176 }
177 177
178 if ( model == "SHARP Corgi" ) { 178 if ( model == "SHARP Corgi" ) {
179 d->m_model = Model_Zaurus_SLC7x0; 179 d->m_model = Model_Zaurus_SLC7x0;
180 d->m_modelstr = "Zaurus SL-C700"; 180 d->m_modelstr = "Zaurus SL-C700";
181 } else if ( model == "SHARP Shepherd" ) { 181 } else if ( model == "SHARP Shepherd" ) {
182 d->m_model = Model_Zaurus_SLC7x0; 182 d->m_model = Model_Zaurus_SLC7x0;
183 d->m_modelstr = "Zaurus SL-C750"; 183 d->m_modelstr = "Zaurus SL-C750";
184 } else if ( model == "SHARP Husky" ) { 184 } else if ( model == "SHARP Husky" ) {
185 d->m_model = Model_Zaurus_SLC7x0; 185 d->m_model = Model_Zaurus_SLC7x0;
186 d->m_modelstr = "Zaurus SL-C760"; 186 d->m_modelstr = "Zaurus SL-C760";
187 } else if ( model == "SHARP Poodle" ) { 187 } else if ( model == "SHARP Poodle" ) {
188 d->m_model = Model_Zaurus_SLB600; 188 d->m_model = Model_Zaurus_SLB600;
189 d->m_modelstr = "Zaurus SL-B500 or SL-5600"; 189 d->m_modelstr = "Zaurus SL-B500 or SL-5600";
190 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 190 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
191 d->m_model = Model_Zaurus_SL5500; 191 d->m_model = Model_Zaurus_SL5500;
192 d->m_modelstr = "Zaurus SL-5500 or SL-5000d"; 192 d->m_modelstr = "Zaurus SL-5500 or SL-5000d";
193 } else { 193 } else {
194 d->m_model = Model_Zaurus_SL5500; 194 d->m_model = Model_Zaurus_SL5500;
195 d->m_modelstr = "Zaurus (Model unknown)"; 195 d->m_modelstr = "Zaurus (Model unknown)";
196 } 196 }
197 197
198 bool flipstate = false; 198 bool flipstate = false;
199 switch ( d->m_model ) { 199 switch ( d->m_model ) {
200 case Model_Zaurus_SLA300: 200 case Model_Zaurus_SLA300:
201 d->m_rotation = Rot0; 201 d->m_rotation = Rot0;
202 break; 202 break;
203 case Model_Zaurus_SLC7x0: 203 case Model_Zaurus_SLC7x0:
204 d->m_rotation = rotation(); 204 d->m_rotation = rotation();
205 d->m_direction = direction(); 205 d->m_direction = direction();
206 break; 206 break;
207 case Model_Zaurus_SLB600: 207 case Model_Zaurus_SLB600:
208 case Model_Zaurus_SL5500: 208 case Model_Zaurus_SL5500:
209 case Model_Zaurus_SL5000: 209 case Model_Zaurus_SL5000:
210 default: 210 default:
211 d->m_rotation = Rot270; 211 d->m_rotation = Rot270;
212 break; 212 break;
213 } 213 }
214 m_leds [0] = Led_Off; 214 m_leds [0] = Led_Off;
215} 215}
216 216
217void Zaurus::initButtons() 217void Zaurus::initButtons()
218{ 218{
219 if ( d->m_buttons ) 219 if ( d->m_buttons )
220 return; 220 return;
221 221
222 d->m_buttons = new QValueList <ODeviceButton>; 222 d->m_buttons = new QValueList <ODeviceButton>;
223 223
224 struct z_button * pz_buttons; 224 struct z_button * pz_buttons;
225 int buttoncount; 225 int buttoncount;
226 switch ( d->m_model ) { 226 switch ( d->m_model ) {
227 case Model_Zaurus_SLC7x0: 227 case Model_Zaurus_SLC7x0:
228 pz_buttons = z_buttons_c700; 228 pz_buttons = z_buttons_c700;
229 buttoncount = ARRAY_SIZE(z_buttons_c700); 229 buttoncount = ARRAY_SIZE(z_buttons_c700);
230 break; 230 break;
231 default: 231 default:
232 pz_buttons = z_buttons; 232 pz_buttons = z_buttons;
233 buttoncount = ARRAY_SIZE(z_buttons); 233 buttoncount = ARRAY_SIZE(z_buttons);
234 break; 234 break;
235 } 235 }
236 236
237 for ( int i = 0; i < buttoncount; i++ ) { 237 for ( int i = 0; i < buttoncount; i++ ) {
238 struct z_button *zb = pz_buttons + i; 238 struct z_button *zb = pz_buttons + i;
239 ODeviceButton b; 239 ODeviceButton b;
240 240
241 b. setKeycode ( zb->code ); 241 b. setKeycode ( zb->code );
242 b. setUserText ( QObject::tr ( "Button", zb->utext )); 242 b. setUserText ( QObject::tr ( "Button", zb->utext ));
243 b. setPixmap ( Resource::loadPixmap ( zb->pix )); 243 b. setPixmap ( Resource::loadPixmap ( zb->pix ));
244 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb->fpressedservice ), 244 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb->fpressedservice ),
245 zb->fpressedaction )); 245 zb->fpressedaction ));
246 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb->fheldservice ), 246 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb->fheldservice ),
247 zb->fheldaction )); 247 zb->fheldaction ));
248 248
249 d->m_buttons->append ( b ); 249 d->m_buttons->append ( b );
250 } 250 }
251 251
252 reloadButtonMapping(); 252 reloadButtonMapping();
253 253
254 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 254 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
255 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), 255 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )),
256 this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 256 this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
257} 257}
258 258
259#include <unistd.h> 259#include <unistd.h>
260#include <fcntl.h> 260#include <fcntl.h>
261#include <sys/ioctl.h> 261#include <sys/ioctl.h>
262 262
263//#include <asm/sharp_char.h> // including kernel headers is evil ... 263//#include <asm/sharp_char.h> // including kernel headers is evil ...
264 264
265#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 265#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
266 266
267 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 267 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
268#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 268#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
269 269
270#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 270#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
271#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 271#define SHARP_BUZ_KEYSOUND 2 /* key sound */
272#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 272#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
273 273
274/* --- for SHARP_BUZZER device --- */ 274/* --- for SHARP_BUZZER device --- */
275 275
276 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 276 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
277//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 277//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
278 278
279#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 279#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
280#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 280#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
281#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 281#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
282#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 282#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
283#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 283#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
284 284
285//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 285//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
286//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 286//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
287 287
288//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 288//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
289//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 289//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
290//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 290//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
291//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 291//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
292//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 292//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
293//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 293//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
294//#define SHARP_PDA_APPSTART 9 /* application start */ 294//#define SHARP_PDA_APPSTART 9 /* application start */
295//#define SHARP_PDA_APPQUIT 10 /* application ends */ 295//#define SHARP_PDA_APPQUIT 10 /* application ends */
296 296
297//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 297//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
298//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 298//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
299//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 299//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
300//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 300//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
301// 301//
302 302
303 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 303 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
304#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 304#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
305 305
306#define SHARP_IOCTL_GET_ROTATION 0x413c 306#define SHARP_IOCTL_GET_ROTATION 0x413c
307 307
308typedef struct sharp_led_status { 308typedef struct sharp_led_status {
309int which; /* select which LED status is wanted. */ 309int which; /* select which LED status is wanted. */
310int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 310int status; /* set new led status if you call SHARP_LED_SETSTATUS */
311} sharp_led_status; 311} sharp_led_status;
312 312
313#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 313#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
314 314
315#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 315#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
316#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 316#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
317#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 317#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
318 318
319// #include <asm/sharp_apm.h> // including kernel headers is evil ... 319// #include <asm/sharp_apm.h> // including kernel headers is evil ...
320 320
321#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 321#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
322#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 322#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
323#define APM_EVT_POWER_BUTTON (1 << 0) 323#define APM_EVT_POWER_BUTTON (1 << 0)
324 324
325#define FL_IOCTL_STEP_CONTRAST 100 325#define FL_IOCTL_STEP_CONTRAST 100
326 326
327 327
328void Zaurus::buzzer ( int sound ) 328void Zaurus::buzzer ( int sound )
329{ 329{
330#ifndef QT_NO_SOUND 330#ifndef QT_NO_SOUND
331 QString soundname; 331 QString soundname;
332 332
333 // Not all devices have real sound 333 // Not all devices have real sound
334 if ( d->m_model == Model_Zaurus_SLC7x0 334 if ( d->m_model == Model_Zaurus_SLC7x0
335 || d->m_model == Model_Zaurus_SLB600 ){ 335 || d->m_model == Model_Zaurus_SLB600 ){
336 336
337 switch ( sound ){ 337 switch ( sound ){
338 case SHARP_BUZ_SCHEDULE_ALARM: 338 case SHARP_BUZ_SCHEDULE_ALARM:
339 soundname = "alarm"; 339 soundname = "alarm";
340 break; 340 break;
341 case SHARP_BUZ_TOUCHSOUND: 341 case SHARP_BUZ_TOUCHSOUND:
342 soundname = "touchsound"; 342 soundname = "touchsound";
343 break; 343 break;
344 case SHARP_BUZ_KEYSOUND: 344 case SHARP_BUZ_KEYSOUND:
345 soundname = "keysound"; 345 soundname = "keysound";
346 break; 346 break;
347 default: 347 default:
348 soundname = "alarm"; 348 soundname = "alarm";
349 349
350 } 350 }
351 } 351 }
352 352
353 // If a soundname is defined, we expect that this device has 353 // If a soundname is defined, we expect that this device has
354 // sound capabilities.. Otherwise we expect to have the buzzer 354 // sound capabilities.. Otherwise we expect to have the buzzer
355 // device.. 355 // device..
356 if ( !soundname.isEmpty() ){ 356 if ( !soundname.isEmpty() ){
357 int fd; 357 int fd;
358 int vol; 358 int vol;
359 bool vol_reset = false; 359 bool vol_reset = false;
360 360
361 Sound snd ( soundname ); 361 Sound snd ( soundname );
362 362
363 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 363 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
364 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 364 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
365 Config cfg ( "qpe" ); 365 Config cfg ( "qpe" );
366 cfg. setGroup ( "Volume" ); 366 cfg. setGroup ( "Volume" );
367 367
368 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 368 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
369 if ( volalarm < 0 ) 369 if ( volalarm < 0 )
370 volalarm = 0; 370 volalarm = 0;
371 else if ( volalarm > 100 ) 371 else if ( volalarm > 100 )
372 volalarm = 100; 372 volalarm = 100;
373 volalarm |= ( volalarm << 8 ); 373 volalarm |= ( volalarm << 8 );
374 374
375 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 375 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
376 vol_reset = true; 376 vol_reset = true;
377 } 377 }
378 } 378 }
379 379
380 snd. play(); 380 snd. play();
381 while ( !snd. isFinished()) 381 while ( !snd. isFinished())
382 qApp->processEvents(); 382 qApp->processEvents();
383 383
384 if ( fd >= 0 ) { 384 if ( fd >= 0 ) {
385 if ( vol_reset ) 385 if ( vol_reset )
386 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 386 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
387 ::close ( fd ); 387 ::close ( fd );
388 } 388 }
389 } else { 389 } else {
390 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 390 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
391 391
392 if ( fd >= 0 ) { 392 if ( fd >= 0 ) {
393 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 393 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
394 ::close ( fd ); 394 ::close ( fd );
395 } 395 }
396 396
397 } 397 }
398#endif 398#endif
399} 399}
400 400
401 401
402void Zaurus::alarmSound() 402void Zaurus::playAlarmSound()
403{ 403{
404 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 404 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
405} 405}
406 406
407void Zaurus::touchSound() 407void Zaurus::playTouchSound()
408{ 408{
409 buzzer ( SHARP_BUZ_TOUCHSOUND ); 409 buzzer ( SHARP_BUZ_TOUCHSOUND );
410} 410}
411 411
412void Zaurus::keySound() 412void Zaurus::playKeySound()
413{ 413{
414 buzzer ( SHARP_BUZ_KEYSOUND ); 414 buzzer ( SHARP_BUZ_KEYSOUND );
415} 415}
416 416
417 417
418QValueList <OLed> Zaurus::ledList() const 418QValueList <OLed> Zaurus::ledList() const
419{ 419{
420 QValueList <OLed> vl; 420 QValueList <OLed> vl;
421 vl << Led_Mail; 421 vl << Led_Mail;
422 return vl; 422 return vl;
423} 423}
424 424
425QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 425QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
426{ 426{
427 QValueList <OLedState> vl; 427 QValueList <OLedState> vl;
428 428
429 if ( l == Led_Mail ) 429 if ( l == Led_Mail )
430 vl << Led_Off << Led_On << Led_BlinkSlow; 430 vl << Led_Off << Led_On << Led_BlinkSlow;
431 return vl; 431 return vl;
432} 432}
433 433
434OLedState Zaurus::ledState ( OLed which ) const 434OLedState Zaurus::ledState ( OLed which ) const
435{ 435{
436 if ( which == Led_Mail ) 436 if ( which == Led_Mail )
437 return m_leds [0]; 437 return m_leds [0];
438 else 438 else
439 return Led_Off; 439 return Led_Off;
440} 440}
441 441
442bool Zaurus::setLedState ( OLed which, OLedState st ) 442bool Zaurus::setLedState ( OLed which, OLedState st )
443{ 443{
444 if (!m_embedix) // Currently not supported on non_embedix kernels 444 if (!m_embedix) // Currently not supported on non_embedix kernels
445 return false; 445 return false;
446 446
447 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 447 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
448 448
449 if ( which == Led_Mail ) { 449 if ( which == Led_Mail ) {
450 if ( fd >= 0 ) { 450 if ( fd >= 0 ) {
451 struct sharp_led_status leds; 451 struct sharp_led_status leds;
452 ::memset ( &leds, 0, sizeof( leds )); 452 ::memset ( &leds, 0, sizeof( leds ));
453 leds. which = SHARP_LED_MAIL_EXISTS; 453 leds. which = SHARP_LED_MAIL_EXISTS;
454 bool ok = true; 454 bool ok = true;
455 455
456 switch ( st ) { 456 switch ( st ) {
457 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 457 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
458 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 458 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
459 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 459 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
460 default : ok = false; 460 default : ok = false;
461 } 461 }
462 462
463 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 463 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
464 m_leds [0] = st; 464 m_leds [0] = st;
465 return true; 465 return true;
466 } 466 }
467 } 467 }
468 } 468 }
469 return false; 469 return false;
470} 470}
471 471
472bool Zaurus::setSoftSuspend ( bool soft ) 472bool Zaurus::setSoftSuspend ( bool soft )
473{ 473{
474 if (!m_embedix) { 474 if (!m_embedix) {
475 /* non-Embedix kernels dont have kernel autosuspend */ 475 /* non-Embedix kernels dont have kernel autosuspend */
476 return ODevice::setSoftSuspend( soft ); 476 return ODevice::setSoftSuspend( soft );
477 } 477 }
478 478
479 bool res = false; 479 bool res = false;
480 int fd; 480 int fd;
481 481
482 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) || 482 if ((( fd = ::open ( "/dev/apm_bios", O_RDWR )) >= 0 ) ||
483 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) { 483 (( fd = ::open ( "/dev/misc/apm_bios",O_RDWR )) >= 0 )) {
484 484
485 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources 485 int sources = ::ioctl ( fd, APM_IOCGEVTSRC, 0 ); // get current event sources
486 486
487 if ( sources >= 0 ) { 487 if ( sources >= 0 ) {
488 if ( soft ) 488 if ( soft )
489 sources &= ~APM_EVT_POWER_BUTTON; 489 sources &= ~APM_EVT_POWER_BUTTON;
490 else 490 else
491 sources |= APM_EVT_POWER_BUTTON; 491 sources |= APM_EVT_POWER_BUTTON;
492 492
493 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 493 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
494 res = true; 494 res = true;
495 else 495 else
496 perror ( "APM_IOCGEVTSRC" ); 496 perror ( "APM_IOCGEVTSRC" );
497 } 497 }
498 else 498 else
499 perror ( "APM_IOCGEVTSRC" ); 499 perror ( "APM_IOCGEVTSRC" );
500 500
501 ::close ( fd ); 501 ::close ( fd );
502 } 502 }
503 else 503 else
504 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 504 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
505 505
506 return res; 506 return res;
507} 507}
508 508
509 509
510bool Zaurus::setDisplayBrightness ( int bright ) 510bool Zaurus::setDisplayBrightness ( int bright )
511{ 511{
512 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright ); 512 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright );
513 bool res = false; 513 bool res = false;
514 int fd; 514 int fd;
515 515
516 if ( bright > 255 ) bright = 255; 516 if ( bright > 255 ) bright = 255;
517 if ( bright < 0 ) bright = 0; 517 if ( bright < 0 ) bright = 0;
518 518
519 if ( m_embedix ) 519 if ( m_embedix )
520 { 520 {
521 if ( d->m_model == Model_Zaurus_SLC7x0 ) 521 if ( d->m_model == Model_Zaurus_SLC7x0 )
522 { 522 {
523 //qDebug( "using special treatment for devices with the corgi backlight interface" ); 523 //qDebug( "using special treatment for devices with the corgi backlight interface" );
524 // special treatment for devices with the corgi backlight interface 524 // special treatment for devices with the corgi backlight interface
525 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 ) 525 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 )
526 { 526 {
527 int value = ( bright == 1 ) ? 1 : bright * ( 17.0 / 255.0 ); 527 int value = ( bright == 1 ) ? 1 : bright * ( 17.0 / 255.0 );
528 char writeCommand[100]; 528 char writeCommand[100];
529 const int count = sprintf( writeCommand, "0x%x\n", value ); 529 const int count = sprintf( writeCommand, "0x%x\n", value );
530 res = ( ::write ( fd, writeCommand, count ) != -1 ); 530 res = ( ::write ( fd, writeCommand, count ) != -1 );
531 ::close ( fd ); 531 ::close ( fd );
532 } 532 }
533 return res; 533 return res;
534 } 534 }
535 else 535 else
536 { 536 {
537 // standard treatment for devices with the dumb embedix frontlight interface 537 // standard treatment for devices with the dumb embedix frontlight interface
538 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 538 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
539 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 539 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
540 if ( bright && !bl ) 540 if ( bright && !bl )
541 bl = 1; 541 bl = 1;
542 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 542 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
543 ::close ( fd ); 543 ::close ( fd );
544 } 544 }
545 } 545 }
546 } 546 }
547 else 547 else
548 { 548 {
549 // special treatment for the OpenZaurus unified interface 549 // special treatment for the OpenZaurus unified interface
550 #define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */ 550 #define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
551 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) { 551 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) {
552 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 ); 552 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 );
553 ::close ( fd ); 553 ::close ( fd );
554 } 554 }
555 } 555 }
556 return res; 556 return res;
557} 557}
558 558
559bool Zaurus::suspend() 559bool Zaurus::suspend()
560{ 560{
561 qDebug("ODevice::suspend"); 561 qDebug("ODevice::suspend");
562 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 562 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
563 return false; 563 return false;
564 564
565 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 565 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
566 return false; 566 return false;
567 567
568 bool res = false; 568 bool res = false;
569 569
570 struct timeval tvs, tvn; 570 struct timeval tvs, tvn;
571 ::gettimeofday ( &tvs, 0 ); 571 ::gettimeofday ( &tvs, 0 );
572 572
573 ::sync(); // flush fs caches 573 ::sync(); // flush fs caches
574 res = ( ::system ( "apm --suspend" ) == 0 ); 574 res = ( ::system ( "apm --suspend" ) == 0 );
575 575
576 // This is needed because the iPAQ apm implementation is asynchronous and we 576 // This is needed because the iPAQ apm implementation is asynchronous and we
577 // can not be sure when exactly the device is really suspended 577 // can not be sure when exactly the device is really suspended
578 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 578 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
579 579
580 if ( res ) { 580 if ( res ) {
581 do { // Yes, wait 15 seconds. This APM bug sucks big time. 581 do { // Yes, wait 15 seconds. This APM bug sucks big time.
582 ::usleep ( 200 * 1000 ); 582 ::usleep ( 200 * 1000 );
583 ::gettimeofday ( &tvn, 0 ); 583 ::gettimeofday ( &tvn, 0 );
584 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); 584 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 );
585 } 585 }
586 586
587 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" ); 587 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" );
588 return res; 588 return res;
589} 589}
590 590
591 591
592Transformation Zaurus::rotation() const 592Transformation Zaurus::rotation() const
593{ 593{
594 Transformation rot; 594 Transformation rot;
595 int handle = 0; 595 int handle = 0;
596 int retval = 0; 596 int retval = 0;
597 597
598 switch ( d->m_model ) { 598 switch ( d->m_model ) {
599 case Model_Zaurus_SLC7x0: 599 case Model_Zaurus_SLC7x0:
600 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 600 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
601 if (handle == -1) { 601 if (handle == -1) {
602 return Rot270; 602 return Rot270;
603 } else { 603 } else {
604 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 604 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
605 ::close (handle); 605 ::close (handle);
606 606
607 if (retval == 2 ) 607 if (retval == 2 )
608 rot = Rot0; 608 rot = Rot0;
609 else 609 else
610 rot = Rot270; 610 rot = Rot270;
611 } 611 }
612 break; 612 break;
613 case Model_Zaurus_SLA300: 613 case Model_Zaurus_SLA300:
614 case Model_Zaurus_SLB600: 614 case Model_Zaurus_SLB600:
615 case Model_Zaurus_SL5500: 615 case Model_Zaurus_SL5500:
616 case Model_Zaurus_SL5000: 616 case Model_Zaurus_SL5000:
617 default: 617 default:
618 rot = d->m_rotation; 618 rot = d->m_rotation;
619 break; 619 break;
620 } 620 }
621 621
622 return rot; 622 return rot;
623} 623}
624ODirection Zaurus::direction() const 624ODirection Zaurus::direction() const
625{ 625{
626 ODirection dir; 626 ODirection dir;
627 int handle = 0; 627 int handle = 0;
628 int retval = 0; 628 int retval = 0;
629 switch ( d->m_model ) { 629 switch ( d->m_model ) {
630 case Model_Zaurus_SLC7x0: 630 case Model_Zaurus_SLC7x0:
631 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 631 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
632 if (handle == -1) { 632 if (handle == -1) {
633 dir = CW; 633 dir = CW;
634 } else { 634 } else {
635 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 635 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
636 ::close (handle); 636 ::close (handle);
637 if (retval == 2 ) 637 if (retval == 2 )
638 dir = CCW; 638 dir = CCW;
639 else 639 else
640 dir = CW; 640 dir = CW;
641 } 641 }
642 break; 642 break;
643 case Model_Zaurus_SLA300: 643 case Model_Zaurus_SLA300:
644 case Model_Zaurus_SLB600: 644 case Model_Zaurus_SLB600:
645 case Model_Zaurus_SL5500: 645 case Model_Zaurus_SL5500:
646 case Model_Zaurus_SL5000: 646 case Model_Zaurus_SL5000:
647 default: 647 default:
648 dir = d->m_direction; 648 dir = d->m_direction;
649 break; 649 break;
650 } 650 }
651 return dir; 651 return dir;
652 652
653} 653}
654 654
655int Zaurus::displayBrightnessResolution() const 655int Zaurus::displayBrightnessResolution() const
656{ 656{
657 if (m_embedix) 657 if (m_embedix)
658 return d->m_model == Model_Zaurus_SLC7x0 ? 18 : 5; 658 return d->m_model == Model_Zaurus_SLC7x0 ? 18 : 5;
659 else 659 else
660 return 256; 660 return 256;
661} 661}
662 662
663bool Zaurus::hasHingeSensor() const 663bool Zaurus::hasHingeSensor() const
664{ 664{
665 return d->m_model == Model_Zaurus_SLC7x0; 665 return d->m_model == Model_Zaurus_SLC7x0;
666} 666}
667 667
668OHingeStatus Zaurus::readHingeSensor() 668OHingeStatus Zaurus::readHingeSensor()
669{ 669{
670 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 670 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
671 if (handle == -1) 671 if (handle == -1)
672 { 672 {
673 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror 673 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
674 return CASE_UNKNOWN; 674 return CASE_UNKNOWN;
675 } 675 }
676 else 676 else
677 { 677 {
678 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 678 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
679 ::close (handle); 679 ::close (handle);
680 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE ) 680 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
681 { 681 {
682 qDebug( "Zaurus::readHingeSensor() - result = %d", retval ); 682 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
683 return static_cast<OHingeStatus>( retval ); 683 return static_cast<OHingeStatus>( retval );
684 } 684 }
685 else 685 else
686 { 686 {
687 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 687 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
688 return CASE_UNKNOWN; 688 return CASE_UNKNOWN;
689 } 689 }
690 } 690 }
691} 691}
diff --git a/libopie2/opiecore/device/odevice_zaurus.h b/libopie2/opiecore/device/odevice_zaurus.h
index c07fe07..f5c5172 100644
--- a/libopie2/opiecore/device/odevice_zaurus.h
+++ b/libopie2/opiecore/device/odevice_zaurus.h
@@ -1,96 +1,96 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#ifndef ODEVICE_ZAURUS 30#ifndef ODEVICE_ZAURUS
31#define ODEVICE_ZAURUS 31#define ODEVICE_ZAURUS
32 32
33#include <opie2/odevice.h> 33#include <opie2/odevice.h>
34 34
35#ifndef ARRAY_SIZE 35#ifndef ARRAY_SIZE
36#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 36#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
37#endif 37#endif
38 38
39// _IO and friends are only defined in kernel headers ... 39// _IO and friends are only defined in kernel headers ...
40 40
41#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 41#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
42 42
43#define OD_IO(type,number) OD_IOC(0,type,number,0) 43#define OD_IO(type,number) OD_IOC(0,type,number,0)
44#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 44#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
45#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 45#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
46#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 46#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
47 47
48using namespace Opie; 48using namespace Opie;
49 49
50class Zaurus : public ODevice 50class Zaurus : public ODevice
51{ 51{
52 52
53 protected: 53 protected:
54 virtual void init(); 54 virtual void init();
55 virtual void initButtons(); 55 virtual void initButtons();
56 56
57 public: 57 public:
58 virtual bool setSoftSuspend ( bool soft ); 58 virtual bool setSoftSuspend ( bool soft );
59 59
60 virtual bool setDisplayBrightness ( int b ); 60 virtual bool setDisplayBrightness ( int b );
61 virtual int displayBrightnessResolution() const; 61 virtual int displayBrightnessResolution() const;
62 62
63 virtual void alarmSound(); 63 virtual void playAlarmSound();
64 virtual void keySound(); 64 virtual void playKeySound();
65 virtual void touchSound(); 65 virtual void playTouchSound();
66 66
67 virtual QValueList <OLed> ledList() const; 67 virtual QValueList <OLed> ledList() const;
68 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 68 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
69 virtual OLedState ledState( OLed led ) const; 69 virtual OLedState ledState( OLed led ) const;
70 virtual bool setLedState( OLed led, OLedState st ); 70 virtual bool setLedState( OLed led, OLedState st );
71 71
72 virtual bool hasHingeSensor() const; 72 virtual bool hasHingeSensor() const;
73 virtual OHingeStatus readHingeSensor(); 73 virtual OHingeStatus readHingeSensor();
74 74
75 virtual bool suspend(); 75 virtual bool suspend();
76 virtual Transformation rotation() const; 76 virtual Transformation rotation() const;
77 virtual ODirection direction() const; 77 virtual ODirection direction() const;
78 78
79 protected: 79 protected:
80 virtual void buzzer ( int snd ); 80 virtual void buzzer ( int snd );
81 81
82 OLedState m_leds [1]; 82 OLedState m_leds [1];
83 bool m_embedix; 83 bool m_embedix;
84}; 84};
85 85
86struct z_button { 86struct z_button {
87 Qt::Key code; 87 Qt::Key code;
88 char *utext; 88 char *utext;
89 char *pix; 89 char *pix;
90 char *fpressedservice; 90 char *fpressedservice;
91 char *fpressedaction; 91 char *fpressedaction;
92 char *fheldservice; 92 char *fheldservice;
93 char *fheldaction; 93 char *fheldaction;
94}; 94};
95 95
96#endif 96#endif