summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2004-06-12 16:54:50 (UTC)
committer mickeyl <mickeyl>2004-06-12 16:54:50 (UTC)
commitb1235df3628d178891eeefed630a22da46b25952 (patch) (unidiff)
treec88a3cb04adcc9fe214ff08e3c0b96b21e3c4f0a
parent7a62e8e3601ee98f5f06261c361fe8132334cd56 (diff)
downloadopie-b1235df3628d178891eeefed630a22da46b25952.zip
opie-b1235df3628d178891eeefed630a22da46b25952.tar.gz
opie-b1235df3628d178891eeefed630a22da46b25952.tar.bz2
- refactor the distribution detection code
- add detection of OpenEmbedded and generic linux distributions - simplify the zaurus model detection code
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice.cpp65
-rw-r--r--libopie2/opiecore/device/odevice.h64
-rw-r--r--libopie2/opiecore/device/odevice_ipaq.cpp25
-rw-r--r--libopie2/opiecore/device/odevice_jornada.cpp19
-rw-r--r--libopie2/opiecore/device/odevice_ramses.cpp12
-rw-r--r--libopie2/opiecore/device/odevice_simpad.cpp65
-rw-r--r--libopie2/opiecore/device/odevice_yopy.cpp11
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp69
8 files changed, 141 insertions, 189 deletions
diff --git a/libopie2/opiecore/device/odevice.cpp b/libopie2/opiecore/device/odevice.cpp
index cef7f63..5b73e59 100644
--- a/libopie2/opiecore/device/odevice.cpp
+++ b/libopie2/opiecore/device/odevice.cpp
@@ -1,276 +1,297 @@
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::Core; 63using namespace Opie::Core;
64 64
65struct default_button default_buttons [] = { 65struct default_button default_buttons [] = {
66 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 66 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
67 "devicebuttons/z_calendar", 67 "devicebuttons/z_calendar",
68 "datebook", "nextView()", 68 "datebook", "nextView()",
69 "today", "raise()" }, 69 "today", "raise()" },
70 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 70 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
71 "devicebuttons/z_contact", 71 "devicebuttons/z_contact",
72 "addressbook", "raise()", 72 "addressbook", "raise()",
73 "addressbook", "beamBusinessCard()" }, 73 "addressbook", "beamBusinessCard()" },
74 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 74 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
75 "devicebuttons/z_home", 75 "devicebuttons/z_home",
76 "QPE/Launcher", "home()", 76 "QPE/Launcher", "home()",
77 "buttonsettings", "raise()" }, 77 "buttonsettings", "raise()" },
78 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 78 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
79 "devicebuttons/z_menu", 79 "devicebuttons/z_menu",
80 "QPE/TaskBar", "toggleMenu()", 80 "QPE/TaskBar", "toggleMenu()",
81 "QPE/TaskBar", "toggleStartMenu()" }, 81 "QPE/TaskBar", "toggleStartMenu()" },
82 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 82 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
83 "devicebuttons/z_mail", 83 "devicebuttons/z_mail",
84 "opiemail", "raise()", 84 "opiemail", "raise()",
85 "opiemail", "newMail()" }, 85 "opiemail", "newMail()" },
86}; 86};
87 87
88ODevice *ODevice::inst() 88ODevice *ODevice::inst()
89{ 89{
90 static ODevice *dev = 0; 90 static ODevice *dev = 0;
91 91
92 // rewrite this to only use /proc/cpuinfo or so 92 // rewrite this to only use /proc/cpuinfo or so
93 QString cpu_info; 93 QString cpu_info;
94 94
95 if ( !dev ) 95 if ( !dev )
96 { 96 {
97 QFile f( PATH_PROC_CPUINFO ); 97 QFile f( PATH_PROC_CPUINFO );
98 if ( f.open( IO_ReadOnly ) ) 98 if ( f.open( IO_ReadOnly ) )
99 { 99 {
100 QTextStream s( &f ); 100 QTextStream s( &f );
101 while ( !s.atEnd() ) 101 while ( !s.atEnd() )
102 { 102 {
103 QString line; 103 QString line;
104 line = s.readLine(); 104 line = s.readLine();
105 if ( line.startsWith( "Hardware" ) ) 105 if ( line.startsWith( "Hardware" ) )
106 { 106 {
107 qDebug( "ODevice() - found '%s'", (const char*) line ); 107 qDebug( "ODevice() - found '%s'", (const char*) line );
108 cpu_info = line; 108 cpu_info = line;
109 if ( line.contains( "sharp", false ) ) dev = new Internal::Zaurus(); 109 if ( line.contains( "sharp", false ) ) dev = new Internal::Zaurus();
110 else if ( line.contains( "ipaq", false ) ) dev = new Internal::iPAQ(); 110 else if ( line.contains( "ipaq", false ) ) dev = new Internal::iPAQ();
111 else if ( line.contains( "simpad", false ) ) dev = new Internal::SIMpad(); 111 else if ( line.contains( "simpad", false ) ) dev = new Internal::SIMpad();
112 else if ( line.contains( "jornada", false ) ) dev = new Internal::Jornada(); 112 else if ( line.contains( "jornada", false ) ) dev = new Internal::Jornada();
113 else if ( line.contains( "ramses", false ) ) dev = new Internal::Ramses(); 113 else if ( line.contains( "ramses", false ) ) dev = new Internal::Ramses();
114 else qWarning( "ODevice() - unknown hardware - using default." ); 114 else qWarning( "ODevice() - unknown hardware - using default." );
115 break; 115 break;
116 } 116 }
117 } 117 }
118 } 118 }
119 else 119 else
120 { 120 {
121 qWarning( "ODevice() - can't open '%s' - unknown hardware - using default.", PATH_PROC_CPUINFO ); 121 qWarning( "ODevice() - can't open '%s' - unknown hardware - using default.", PATH_PROC_CPUINFO );
122 } 122 }
123 if ( !dev ) dev = new ODevice(); 123 if ( !dev ) dev = new ODevice();
124 dev->init(cpu_info); 124 dev->init(cpu_info);
125 } 125 }
126 return dev; 126 return dev;
127} 127}
128 128
129ODevice::ODevice() 129ODevice::ODevice()
130{ 130{
131 d = new ODeviceData; 131 d = new ODeviceData;
132 132
133 d->m_modelstr = "Unknown"; 133 d->m_modelstr = "Unknown";
134 d->m_model = Model_Unknown; 134 d->m_model = Model_Unknown;
135 d->m_vendorstr = "Unknown"; 135 d->m_vendorstr = "Unknown";
136 d->m_vendor = Vendor_Unknown; 136 d->m_vendor = Vendor_Unknown;
137 d->m_systemstr = "Unknown"; 137 d->m_systemstr = "Unknown";
138 d->m_system = System_Unknown; 138 d->m_system = System_Unknown;
139 d->m_sysverstr = "0.0"; 139 d->m_sysverstr = "0.0";
140 d->m_rotation = Rot0; 140 d->m_rotation = Rot0;
141 d->m_direction = CW; 141 d->m_direction = CW;
142 142
143 d->m_holdtime = 1000; // 1000ms 143 d->m_holdtime = 1000; // 1000ms
144 d->m_buttons = 0; 144 d->m_buttons = 0;
145 d->m_cpu_frequencies = new QStrList; 145 d->m_cpu_frequencies = new QStrList;
146
147 // New distribution detection code first checks for legacy distributions,
148 // identified by /etc/familiar-version or /etc/oz_version.
149 // Then check for OpenEmbedded and lastly, read /etc/issue
150
151 for ( unsigned int i = 0; i < sizeof distributions; ++i )
152 {
153 if ( QFile::exists( distributions[i].sysvfile ) )
154 {
155 d->m_systemstr = distributions[i].sysstr;
156 d->m_system = distributions[i].system;
157 d->m_sysverstr = "<Unknown>";
158 QFile f( distributions[i].sysvfile );
159 if ( f.open( IO_ReadOnly ) )
160 {
161 QTextStream ts( &f );
162 d->m_sysverstr = ts.readLine();
163 }
164 break;
165 }
166 }
146} 167}
147 168
148void ODevice::systemMessage ( const QCString &msg, const QByteArray & ) 169void ODevice::systemMessage( const QCString &msg, const QByteArray & )
149{ 170{
150 if ( msg == "deviceButtonMappingChanged()" ) { 171 if ( msg == "deviceButtonMappingChanged()" ) {
151 reloadButtonMapping(); 172 reloadButtonMapping();
152 } 173 }
153} 174}
154 175
155void ODevice::init(const QString&) 176void ODevice::init(const QString&)
156{ 177{
157} 178}
158 179
159/** 180/**
160* This method initialises the button mapping 181* This method initialises the button mapping
161*/ 182*/
162void ODevice::initButtons() 183void ODevice::initButtons()
163{ 184{
164 if ( d->m_buttons ) 185 if ( d->m_buttons )
165 return; 186 return;
166 187
167 qDebug ( "init Buttons" ); 188 qDebug ( "init Buttons" );
168 d->m_buttons = new QValueList <ODeviceButton>; 189 d->m_buttons = new QValueList <ODeviceButton>;
169 for ( uint i = 0; i < ( sizeof( default_buttons ) / sizeof( default_button )); i++ ) { 190 for ( uint i = 0; i < ( sizeof( default_buttons ) / sizeof( default_button )); i++ ) {
170 default_button *db = default_buttons + i; 191 default_button *db = default_buttons + i;
171 ODeviceButton b; 192 ODeviceButton b;
172 b. setKeycode ( db->code ); 193 b. setKeycode ( db->code );
173 b. setUserText ( QObject::tr ( "Button", db->utext )); 194 b. setUserText ( QObject::tr ( "Button", db->utext ));
174 b. setPixmap ( Resource::loadPixmap ( db->pix )); 195 b. setPixmap ( Resource::loadPixmap ( db->pix ));
175 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( db->fpressedservice ), db->fpressedaction )); 196 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( db->fpressedservice ), db->fpressedaction ));
176 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( db->fheldservice ), db->fheldaction )); 197 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( db->fheldservice ), db->fheldaction ));
177 d->m_buttons->append ( b ); 198 d->m_buttons->append ( b );
178 } 199 }
179 200
180 reloadButtonMapping(); 201 reloadButtonMapping();
181 202
182 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 203 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
183 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&))); 204 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
184} 205}
185 206
186ODevice::~ODevice() 207ODevice::~ODevice()
187{ 208{
188// we leak m_devicebuttons and m_cpu_frequency 209// we leak m_devicebuttons and m_cpu_frequency
189// but it's a singleton and it is not so importantant 210// but it's a singleton and it is not so importantant
190// -zecke 211// -zecke
191 delete d; 212 delete d;
192} 213}
193 214
194bool ODevice::setSoftSuspend ( bool /*soft*/ ) 215bool ODevice::setSoftSuspend ( bool /*soft*/ )
195{ 216{
196 return false; 217 return false;
197} 218}
198 219
199//#include <linux/apm_bios.h> 220//#include <linux/apm_bios.h>
200 221
201#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 222#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
202 223
203/** 224/**
204* This method will try to suspend the device 225* This method will try to suspend the device
205* It only works if the user is the QWS Server and the apm application 226* It only works if the user is the QWS Server and the apm application
206* is installed. 227* is installed.
207* It tries to suspend and then waits some time cause some distributions 228* It tries to suspend and then waits some time cause some distributions
208* do have asynchronus apm implementations. 229* do have asynchronus apm implementations.
209* This method will either fail and return false or it'll suspend the 230* This method will either fail and return false or it'll suspend the
210* device and return once the device got woken up 231* device and return once the device got woken up
211* 232*
212* @return if the device got suspended 233* @return if the device got suspended
213*/ 234*/
214bool ODevice::suspend() 235bool ODevice::suspend()
215{ 236{
216 qDebug("ODevice::suspend"); 237 qDebug("ODevice::suspend");
217 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 238 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
218 return false; 239 return false;
219 240
220 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 241 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
221 return false; 242 return false;
222 243
223 bool res = false; 244 bool res = false;
224 ODevice::sendSuspendmsg(); 245 ODevice::sendSuspendmsg();
225 246
226 struct timeval tvs, tvn; 247 struct timeval tvs, tvn;
227 ::gettimeofday ( &tvs, 0 ); 248 ::gettimeofday ( &tvs, 0 );
228 249
229 ::sync(); // flush fs caches 250 ::sync(); // flush fs caches
230 res = ( ::system ( "apm --suspend" ) == 0 ); 251 res = ( ::system ( "apm --suspend" ) == 0 );
231 252
232 // This is needed because the iPAQ apm implementation is asynchronous and we 253 // This is needed because the iPAQ apm implementation is asynchronous and we
233 // can not be sure when exactly the device is really suspended 254 // can not be sure when exactly the device is really suspended
234 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 255 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
235 256
236 if ( res ) { 257 if ( res ) {
237 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 258 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
238 ::usleep ( 200 * 1000 ); 259 ::usleep ( 200 * 1000 );
239 ::gettimeofday ( &tvn, 0 ); 260 ::gettimeofday ( &tvn, 0 );
240 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 261 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
241 } 262 }
242 263
243 return res; 264 return res;
244} 265}
245 266
246//#include <linux/fb.h> better not rely on kernel headers in userspace ... 267//#include <linux/fb.h> better not rely on kernel headers in userspace ...
247 268
248#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 269#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
249 270
250/* VESA Blanking Levels */ 271/* VESA Blanking Levels */
251#define VESA_NO_BLANKING 0 272#define VESA_NO_BLANKING 0
252#define VESA_VSYNC_SUSPEND 1 273#define VESA_VSYNC_SUSPEND 1
253#define VESA_HSYNC_SUSPEND 2 274#define VESA_HSYNC_SUSPEND 2
254#define VESA_POWERDOWN 3 275#define VESA_POWERDOWN 3
255 276
256/** 277/**
257* This sets the display on or off 278* This sets the display on or off
258*/ 279*/
259bool ODevice::setDisplayStatus ( bool on ) 280bool ODevice::setDisplayStatus ( bool on )
260{ 281{
261 qDebug("ODevice::setDisplayStatus(%d)", on); 282 qDebug("ODevice::setDisplayStatus(%d)", on);
262 283
263 if ( d->m_model == Model_Unknown ) 284 if ( d->m_model == Model_Unknown )
264 return false; 285 return false;
265 286
266 bool res = false; 287 bool res = false;
267 int fd; 288 int fd;
268 289
269 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 290 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
270 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 291 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
271 ::close ( fd ); 292 ::close ( fd );
272 } 293 }
273 return res; 294 return res;
274} 295}
275 296
276/** 297/**
diff --git a/libopie2/opiecore/device/odevice.h b/libopie2/opiecore/device/odevice.h
index aaebde3..474d792 100644
--- a/libopie2/opiecore/device/odevice.h
+++ b/libopie2/opiecore/device/odevice.h
@@ -1,249 +1,271 @@
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{
44namespace Core{ 44namespace Core{
45 45
46 class ODeviceData; 46 class ODeviceData;
47/** 47/**
48 * The available devices 48 * The available devices
49 */ 49 */
50enum OModel { 50enum OModel {
51 Model_Unknown, // = 0 51 Model_Unknown, // = 0
52 52
53 Model_Series_Mask = 0xff000000, 53 Model_Series_Mask = 0xff000000,
54 54
55 Model_iPAQ = ( 1 << 24 ), 55 Model_iPAQ = ( 1 << 24 ),
56 56
57 Model_iPAQ_All = ( Model_iPAQ | 0xffffff ), 57 Model_iPAQ_All = ( Model_iPAQ | 0xffffff ),
58 Model_iPAQ_H31xx = ( Model_iPAQ | 0x000001 ), 58 Model_iPAQ_H31xx = ( Model_iPAQ | 0x000001 ),
59 Model_iPAQ_H36xx = ( Model_iPAQ | 0x000002 ), 59 Model_iPAQ_H36xx = ( Model_iPAQ | 0x000002 ),
60 Model_iPAQ_H37xx = ( Model_iPAQ | 0x000004 ), 60 Model_iPAQ_H37xx = ( Model_iPAQ | 0x000004 ),
61 Model_iPAQ_H38xx = ( Model_iPAQ | 0x000008 ), 61 Model_iPAQ_H38xx = ( Model_iPAQ | 0x000008 ),
62 Model_iPAQ_H39xx = ( Model_iPAQ | 0x000010 ), 62 Model_iPAQ_H39xx = ( Model_iPAQ | 0x000010 ),
63 Model_iPAQ_H5xxx = ( Model_iPAQ | 0x000020 ), 63 Model_iPAQ_H5xxx = ( Model_iPAQ | 0x000020 ),
64 Model_iPAQ_H22xx = ( Model_iPAQ | 0x000040 ), 64 Model_iPAQ_H22xx = ( Model_iPAQ | 0x000040 ),
65 65
66 Model_Jornada = ( 6 << 24 ), 66 Model_Jornada = ( 6 << 24 ),
67 Model_Jornada_56x = ( Model_Jornada | 0x000001 ), 67 Model_Jornada_56x = ( Model_Jornada | 0x000001 ),
68 68
69 Model_Zaurus = ( 2 << 24 ), 69 Model_Zaurus = ( 2 << 24 ),
70 70
71 Model_Zaurus_SL5000 = ( Model_Zaurus | 0x000001 ), 71 Model_Zaurus_SL5000 = ( Model_Zaurus | 0x000001 ),
72 Model_Zaurus_SL5500 = ( Model_Zaurus | 0x000002 ), 72 Model_Zaurus_SL5500 = ( Model_Zaurus | 0x000002 ),
73 Model_Zaurus_SLA300 = ( Model_Zaurus | 0x000003 ), 73 Model_Zaurus_SLA300 = ( Model_Zaurus | 0x000003 ),
74 Model_Zaurus_SLB600 = ( Model_Zaurus | 0x000004 ), 74 Model_Zaurus_SLB600 = ( Model_Zaurus | 0x000004 ),
75 Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x000005 ), 75 Model_Zaurus_SLC7x0 = ( Model_Zaurus | 0x000005 ),
76 76
77 Model_SIMpad = ( 3 << 24 ), 77 Model_SIMpad = ( 3 << 24 ),
78 78
79 Model_SIMpad_All = ( Model_SIMpad | 0xffffff ), 79 Model_SIMpad_All = ( Model_SIMpad | 0xffffff ),
80 Model_SIMpad_CL4 = ( Model_SIMpad | 0x000001 ), 80 Model_SIMpad_CL4 = ( Model_SIMpad | 0x000001 ),
81 Model_SIMpad_SL4 = ( Model_SIMpad | 0x000002 ), 81 Model_SIMpad_SL4 = ( Model_SIMpad | 0x000002 ),
82 Model_SIMpad_SLC = ( Model_SIMpad | 0x000004 ), 82 Model_SIMpad_SLC = ( Model_SIMpad | 0x000004 ),
83 Model_SIMpad_TSinus = ( Model_SIMpad | 0x000008 ), 83 Model_SIMpad_TSinus = ( Model_SIMpad | 0x000008 ),
84 84
85 Model_Ramses = ( 4 << 24 ), 85 Model_Ramses = ( 4 << 24 ),
86 86
87 Model_Ramses_All = ( Model_Ramses | 0xffffff ), 87 Model_Ramses_All = ( Model_Ramses | 0xffffff ),
88 Model_Ramses_MNCI = ( Model_Ramses | 0x000001 ), 88 Model_Ramses_MNCI = ( Model_Ramses | 0x000001 ),
89 89
90 Model_Yopy = ( 5 << 24 ), 90 Model_Yopy = ( 5 << 24 ),
91 91
92 Model_Yopy_All = ( Model_Yopy | 0xffffff ), 92 Model_Yopy_All = ( Model_Yopy | 0xffffff ),
93 Model_Yopy_3000 = ( Model_Yopy | 0x000001 ), 93 Model_Yopy_3000 = ( Model_Yopy | 0x000001 ),
94 Model_Yopy_3500 = ( Model_Yopy | 0x000002 ), 94 Model_Yopy_3500 = ( Model_Yopy | 0x000002 ),
95 Model_Yopy_3700 = ( Model_Yopy | 0x000003 ), 95 Model_Yopy_3700 = ( Model_Yopy | 0x000003 ),
96 96
97 Model_Beagle = ( 6 << 24 ),
98
99 Model_Beagle_All = ( Model_Beagle | 0xffffff ),
100 Model_Beagle_PA100 = ( Model_Beagle | 0x000001 ),
101
97}; 102};
98 103
99/** 104/**
100 * The vendor of the device 105 * The vendor of the device
101 */ 106 */
102enum OVendor { 107enum OVendor {
103 Vendor_Unknown, 108 Vendor_Unknown,
104 109
105 Vendor_HP, 110 Vendor_HP,
106 Vendor_Sharp, 111 Vendor_Sharp,
107 Vendor_SIEMENS, 112 Vendor_SIEMENS,
108 Vendor_MundN, 113 Vendor_MundN,
109 Vendor_GMate, 114 Vendor_GMate,
115 Vendor_MasterIA,
110}; 116};
111 117
112/** 118/**
113 * The System used 119 * The System used
114 */ 120 */
115enum OSystem { 121enum OSystem {
116 System_Unknown, 122 System_Unknown,
117 123
118 System_Familiar, 124 System_Familiar,
119 System_Zaurus, 125 System_Zaurus,
120 System_OpenZaurus, 126 System_OpenZaurus,
121 System_Linupy, 127 System_Linupy,
128 System_OpenEmbedded,
129};
130
131typedef struct {
132 OSystem system;
133 char* sysstr;
134 char* sysvfile;
135} ODistribution;
136
137static ODistribution distributions[] =
138{
139 { System_Familiar, "FamiliarLinux", "/etc/familiar-version" },
140 { System_OpenZaurus, "OpenZaurus", "/etc/oz_version" },
141 { System_OpenEmbedded, "OpenEmbedded", "/etc/oe-version" },
142 { System_Unknown, "Linux", "/etc/issue" },
143
122}; 144};
123 145
124enum OLedState { 146enum OLedState {
125 Led_Off, 147 Led_Off,
126 Led_On, 148 Led_On,
127 Led_BlinkSlow, 149 Led_BlinkSlow,
128 Led_BlinkFast 150 Led_BlinkFast
129}; 151};
130 152
131enum OLed { 153enum OLed {
132 Led_Mail, 154 Led_Mail,
133 Led_Power, 155 Led_Power,
134 Led_BlueTooth 156 Led_BlueTooth
135}; 157};
136 158
137enum OHardKey { 159enum OHardKey {
138 HardKey_Datebook = Qt::Key_F9, 160 HardKey_Datebook = Qt::Key_F9,
139 HardKey_Contacts = Qt::Key_F10, 161 HardKey_Contacts = Qt::Key_F10,
140 HardKey_Menu = Qt::Key_F11, 162 HardKey_Menu = Qt::Key_F11,
141 HardKey_Home = Qt::Key_F12, 163 HardKey_Home = Qt::Key_F12,
142 HardKey_Mail = Qt::Key_F13, 164 HardKey_Mail = Qt::Key_F13,
143 HardKey_Record = Qt::Key_F24, 165 HardKey_Record = Qt::Key_F24,
144 HardKey_Suspend = Qt::Key_F34, 166 HardKey_Suspend = Qt::Key_F34,
145 HardKey_Backlight = Qt::Key_F35, 167 HardKey_Backlight = Qt::Key_F35,
146 HardKey_Action = Qt::Key_F10, 168 HardKey_Action = Qt::Key_F10,
147 HardKey_OK = Qt::Key_F11, 169 HardKey_OK = Qt::Key_F11,
148 HardKey_End = Qt::Key_F12, 170 HardKey_End = Qt::Key_F12,
149}; 171};
150 172
151enum ODirection { 173enum ODirection {
152 CW = 0, 174 CW = 0,
153 CCW = 1, 175 CCW = 1,
154 Flip = 2, 176 Flip = 2,
155}; 177};
156 178
157enum OHingeStatus { 179enum OHingeStatus {
158 CASE_CLOSED = 3, 180 CASE_CLOSED = 3,
159 CASE_PORTRAIT = 2, 181 CASE_PORTRAIT = 2,
160 CASE_LANDSCAPE = 0, 182 CASE_LANDSCAPE = 0,
161 CASE_UNKNOWN = 1, 183 CASE_UNKNOWN = 1,
162}; 184};
163 185
164/* default button for qvfb or such 186/* default button for qvfb or such
165 * see odevice.cpp for details. 187 * see odevice.cpp for details.
166 * hint: manage a user defined button for qvfb? 188 * hint: manage a user defined button for qvfb?
167 * alwin 189 * alwin
168 */ 190 */
169struct default_button { 191struct default_button {
170 Qt::Key code; 192 Qt::Key code;
171 char *utext; 193 char *utext;
172 char *pix; 194 char *pix;
173 char *fpressedservice; 195 char *fpressedservice;
174 char *fpressedaction; 196 char *fpressedaction;
175 char *fheldservice; 197 char *fheldservice;
176 char *fheldaction; 198 char *fheldaction;
177}; 199};
178 200
179/** 201/**
180 * A singleton which gives informations about device specefic option 202 * A singleton which gives informations about device specefic option
181 * like the Hardware used, LEDs, the Base Distribution and 203 * like the Hardware used, LEDs, the Base Distribution and
182 * hardware key mappings. 204 * hardware key mappings.
183 * 205 *
184 * @short A small class for device specefic options 206 * @short A small class for device specefic options
185 * @see QObject 207 * @see QObject
186 * @author Robert Griebl 208 * @author Robert Griebl
187 * @version 1.0 209 * @version 1.0
188 */ 210 */
189class ODevice : public QObject 211class ODevice : public QObject
190{ 212{
191 Q_OBJECT 213 Q_OBJECT
192 214
193private: 215private:
194 /* disable copy */ 216 /* disable copy */
195 ODevice ( const ODevice & ); 217 ODevice ( const ODevice & );
196 218
197protected: 219protected:
198 ODevice(); 220 ODevice();
199 virtual void init(const QString&); 221 virtual void init(const QString&);
200 virtual void initButtons(); 222 virtual void initButtons();
201 static void sendSuspendmsg(); 223 static void sendSuspendmsg();
202 224
203 ODeviceData *d; 225 ODeviceData *d;
204 226
205public: 227public:
206 // sandman do we want to allow destructions? -zecke? 228 // sandman do we want to allow destructions? -zecke?
207 virtual ~ODevice(); 229 virtual ~ODevice();
208 230
209 static ODevice *inst(); 231 static ODevice *inst();
210 232
211 // information 233 // information
212 234
213 QString modelString() const; 235 QString modelString() const;
214 OModel model() const; 236 OModel model() const;
215 inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); } 237 inline OModel series() const { return (OModel) ( model() & Model_Series_Mask ); }
216 238
217 QString vendorString() const; 239 QString vendorString() const;
218 OVendor vendor() const; 240 OVendor vendor() const;
219 241
220 QString systemString() const; 242 QString systemString() const;
221 OSystem system() const; 243 OSystem system() const;
222 244
223 QString systemVersionString() const; 245 QString systemVersionString() const;
224 246
225 virtual Transformation rotation() const; 247 virtual Transformation rotation() const;
226 virtual ODirection direction() const; 248 virtual ODirection direction() const;
227 249
228 // system 250 // system
229 251
230 virtual bool setSoftSuspend ( bool on ); 252 virtual bool setSoftSuspend ( bool on );
231 virtual bool suspend(); 253 virtual bool suspend();
232 254
233 virtual bool setDisplayStatus ( bool on ); 255 virtual bool setDisplayStatus ( bool on );
234 virtual bool setDisplayBrightness ( int brightness ); 256 virtual bool setDisplayBrightness ( int brightness );
235 virtual int displayBrightnessResolution() const; 257 virtual int displayBrightnessResolution() const;
236 virtual bool setDisplayContrast ( int contrast ); 258 virtual bool setDisplayContrast ( int contrast );
237 virtual int displayContrastResolution() const; 259 virtual int displayContrastResolution() const;
238 260
239 // don't add new virtual methods, use this: 261 // don't add new virtual methods, use this:
240 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); }; 262 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); };
241 // and in your subclass do do overwrite 263 // and in your subclass do do overwrite
242 //protected virtual int virtual_hook(int, void *) 264 //protected virtual int virtual_hook(int, void *)
243 // which is defined below 265 // which is defined below
244 266
245 // input / output 267 // input / output
246 virtual void playAlarmSound(); 268 virtual void playAlarmSound();
247 virtual void playKeySound(); 269 virtual void playKeySound();
248 virtual void playTouchSound(); 270 virtual void playTouchSound();
249 271
diff --git a/libopie2/opiecore/device/odevice_ipaq.cpp b/libopie2/opiecore/device/odevice_ipaq.cpp
index efe35e7..16c0538 100644
--- a/libopie2/opiecore/device/odevice_ipaq.cpp
+++ b/libopie2/opiecore/device/odevice_ipaq.cpp
@@ -13,299 +13,274 @@
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 56
57using namespace Opie::Core; 57using namespace Opie::Core;
58using namespace Opie::Core::Internal; 58using namespace Opie::Core::Internal;
59 59
60/* KERNEL */ 60/* KERNEL */
61#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 61#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
62 62
63#define OD_IO(type,number) OD_IOC(0,type,number,0) 63#define OD_IO(type,number) OD_IOC(0,type,number,0)
64#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 64#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
65#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 65#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
66#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 66#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
67 67
68typedef struct { 68typedef struct {
69 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */ 69 unsigned char OffOnBlink; /* 0=off 1=on 2=Blink */
70 unsigned char TotalTime; /* Units of 5 seconds */ 70 unsigned char TotalTime; /* Units of 5 seconds */
71 unsigned char OnTime; /* units of 100m/s */ 71 unsigned char OnTime; /* units of 100m/s */
72 unsigned char OffTime; /* units of 100m/s */ 72 unsigned char OffTime; /* units of 100m/s */
73} LED_IN; 73} LED_IN;
74 74
75typedef struct { 75typedef struct {
76 unsigned char mode; 76 unsigned char mode;
77 unsigned char pwr; 77 unsigned char pwr;
78 unsigned char brightness; 78 unsigned char brightness;
79} FLITE_IN; 79} FLITE_IN;
80 80
81#define LED_ON OD_IOW( 'f', 5, LED_IN ) 81#define LED_ON OD_IOW( 'f', 5, LED_IN )
82#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN ) 82#define FLITE_ON OD_IOW( 'f', 7, FLITE_IN )
83 83
84struct i_button ipaq_buttons [] = { 84struct i_button ipaq_buttons [] = {
85 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 85 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
86 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 86 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
87 "devicebuttons/ipaq_calendar", 87 "devicebuttons/ipaq_calendar",
88 "datebook", "nextView()", 88 "datebook", "nextView()",
89 "today", "raise()" }, 89 "today", "raise()" },
90 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 90 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
91 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 91 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
92 "devicebuttons/ipaq_contact", 92 "devicebuttons/ipaq_contact",
93 "addressbook", "raise()", 93 "addressbook", "raise()",
94 "addressbook", "beamBusinessCard()" }, 94 "addressbook", "beamBusinessCard()" },
95 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 95 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
96 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 96 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
97 "devicebuttons/ipaq_menu", 97 "devicebuttons/ipaq_menu",
98 "QPE/TaskBar", "toggleMenu()", 98 "QPE/TaskBar", "toggleMenu()",
99 "QPE/TaskBar", "toggleStartMenu()" }, 99 "QPE/TaskBar", "toggleStartMenu()" },
100 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 100 { Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
101 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 101 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
102 "devicebuttons/ipaq_mail", 102 "devicebuttons/ipaq_mail",
103 "opiemail", "raise()", 103 "opiemail", "raise()",
104 "opiemail", "newMail()" }, 104 "opiemail", "newMail()" },
105 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 105 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
106 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 106 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
107 "devicebuttons/ipaq_home", 107 "devicebuttons/ipaq_home",
108 "QPE/Launcher", "home()", 108 "QPE/Launcher", "home()",
109 "buttonsettings", "raise()" }, 109 "buttonsettings", "raise()" },
110 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx, 110 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx | Model_iPAQ_H5xxx,
111 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 111 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
112 "devicebuttons/ipaq_record", 112 "devicebuttons/ipaq_record",
113 "QPE/VMemo", "toggleRecord()", 113 "QPE/VMemo", "toggleRecord()",
114 "sound", "raise()" }, 114 "sound", "raise()" },
115}; 115};
116 116
117void iPAQ::init(const QString& model) 117void iPAQ::init(const QString& model)
118{ 118{
119 d->m_vendorstr = "HP"; 119 d->m_vendorstr = "HP";
120 d->m_vendor = Vendor_HP; 120 d->m_vendor = Vendor_HP;
121 121
122 d->m_modelstr = model.mid(model.findRev('H')); 122 d->m_modelstr = model.mid(model.findRev('H'));
123 123
124 if ( d->m_modelstr == "H3100" ) 124 if ( d->m_modelstr == "H3100" )
125 d->m_model = Model_iPAQ_H31xx; 125 d->m_model = Model_iPAQ_H31xx;
126 else if ( d->m_modelstr == "H3600" ) 126 else if ( d->m_modelstr == "H3600" )
127 d->m_model = Model_iPAQ_H36xx; 127 d->m_model = Model_iPAQ_H36xx;
128 else if ( d->m_modelstr == "H3700" ) 128 else if ( d->m_modelstr == "H3700" )
129 d->m_model = Model_iPAQ_H37xx; 129 d->m_model = Model_iPAQ_H37xx;
130 else if ( d->m_modelstr == "H3800" ) 130 else if ( d->m_modelstr == "H3800" )
131 d->m_model = Model_iPAQ_H38xx; 131 d->m_model = Model_iPAQ_H38xx;
132 else if ( d->m_modelstr == "H3900" ) 132 else if ( d->m_modelstr == "H3900" )
133 d->m_model = Model_iPAQ_H39xx; 133 d->m_model = Model_iPAQ_H39xx;
134 else if ( d->m_modelstr == "H5400" ) 134 else if ( d->m_modelstr == "H5400" )
135 d->m_model = Model_iPAQ_H5xxx; 135 d->m_model = Model_iPAQ_H5xxx;
136 else if ( d->m_modelstr == "H2200" ) 136 else if ( d->m_modelstr == "H2200" )
137 d->m_model = Model_iPAQ_H22xx; 137 d->m_model = Model_iPAQ_H22xx;
138 else 138 else
139 d->m_model = Model_Unknown; 139 d->m_model = Model_Unknown;
140 140
141
142
143 switch ( d->m_model ) { 141 switch ( d->m_model ) {
144 case Model_iPAQ_H31xx: 142 case Model_iPAQ_H31xx:
145 case Model_iPAQ_H38xx: 143 case Model_iPAQ_H38xx:
146 d->m_rotation = Rot90; 144 d->m_rotation = Rot90;
147 break; 145 break;
148 case Model_iPAQ_H5xxx: 146 case Model_iPAQ_H5xxx:
149 case Model_iPAQ_H22xx: 147 case Model_iPAQ_H22xx:
150 d->m_rotation = Rot0; 148 d->m_rotation = Rot0;
151 break; 149 break;
152 case Model_iPAQ_H36xx: 150 case Model_iPAQ_H36xx:
153 case Model_iPAQ_H37xx: 151 case Model_iPAQ_H37xx:
154 case Model_iPAQ_H39xx: 152 case Model_iPAQ_H39xx:
155 default: 153 default:
156 d->m_rotation = Rot270; 154 d->m_rotation = Rot270;
157 break; 155 break;
158 156
159 } 157 }
160 158
161 QFile f( "/etc/familiar-version" );
162 if ( f. open ( IO_ReadOnly )) {
163 d->m_systemstr = "Familiar";
164 d->m_system = System_Familiar;
165
166 QTextStream ts ( &f );
167 d->m_sysverstr = ts. readLine(). mid ( 10 );
168
169 f. close();
170 } else {
171 f. setName ( "/etc/oz_version" );
172
173 if ( f. open ( IO_ReadOnly )) {
174 d->m_systemstr = "OpenEmbedded/iPaq";
175 d->m_system = System_Familiar;
176
177 QTextStream ts ( &f );
178 ts.setDevice ( &f );
179 d->m_sysverstr = ts. readLine();
180 f. close();
181 }
182 }
183
184 m_leds [0] = m_leds [1] = Led_Off; 159 m_leds [0] = m_leds [1] = Led_Off;
185 160
186 m_power_timer = 0; 161 m_power_timer = 0;
187 162
188} 163}
189 164
190void iPAQ::initButtons() 165void iPAQ::initButtons()
191{ 166{
192 if ( d->m_buttons ) 167 if ( d->m_buttons )
193 return; 168 return;
194 169
195 if ( isQWS( ) ) 170 if ( isQWS( ) )
196 QWSServer::setKeyboardFilter ( this ); 171 QWSServer::setKeyboardFilter ( this );
197 172
198 d->m_buttons = new QValueList <ODeviceButton>; 173 d->m_buttons = new QValueList <ODeviceButton>;
199 174
200 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 175 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
201 i_button *ib = ipaq_buttons + i; 176 i_button *ib = ipaq_buttons + i;
202 ODeviceButton b; 177 ODeviceButton b;
203 178
204 if (( ib->model & d->m_model ) == d->m_model ) { 179 if (( ib->model & d->m_model ) == d->m_model ) {
205 b. setKeycode ( ib->code ); 180 b. setKeycode ( ib->code );
206 b. setUserText ( QObject::tr ( "Button", ib->utext )); 181 b. setUserText ( QObject::tr ( "Button", ib->utext ));
207 b. setPixmap ( Resource::loadPixmap ( ib->pix )); 182 b. setPixmap ( Resource::loadPixmap ( ib->pix ));
208 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); 183 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction ));
209 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); 184 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction ));
210 185
211 d->m_buttons->append ( b ); 186 d->m_buttons->append ( b );
212 } 187 }
213 } 188 }
214 reloadButtonMapping(); 189 reloadButtonMapping();
215 190
216 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 191 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
217 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&)));
218} 193}
219 194
220QValueList <OLed> iPAQ::ledList() const 195QValueList <OLed> iPAQ::ledList() const
221{ 196{
222 QValueList <OLed> vl; 197 QValueList <OLed> vl;
223 vl << Led_Power; 198 vl << Led_Power;
224 199
225 if ( d->m_model == Model_iPAQ_H38xx ) 200 if ( d->m_model == Model_iPAQ_H38xx )
226 vl << Led_BlueTooth; 201 vl << Led_BlueTooth;
227 return vl; 202 return vl;
228} 203}
229 204
230QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const 205QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
231{ 206{
232 QValueList <OLedState> vl; 207 QValueList <OLedState> vl;
233 208
234 if ( l == Led_Power ) 209 if ( l == Led_Power )
235 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 210 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
236 else if ( l == Led_BlueTooth && d->m_model == Model_iPAQ_H38xx ) 211 else if ( l == Led_BlueTooth && d->m_model == Model_iPAQ_H38xx )
237 vl << Led_Off; // << Led_On << ??? 212 vl << Led_Off; // << Led_On << ???
238 213
239 return vl; 214 return vl;
240} 215}
241 216
242OLedState iPAQ::ledState ( OLed l ) const 217OLedState iPAQ::ledState ( OLed l ) const
243{ 218{
244 switch ( l ) { 219 switch ( l ) {
245 case Led_Power: 220 case Led_Power:
246 return m_leds [0]; 221 return m_leds [0];
247 case Led_BlueTooth: 222 case Led_BlueTooth:
248 return m_leds [1]; 223 return m_leds [1];
249 default: 224 default:
250 return Led_Off; 225 return Led_Off;
251 } 226 }
252} 227}
253 228
254bool iPAQ::setLedState ( OLed l, OLedState st ) 229bool iPAQ::setLedState ( OLed l, OLedState st )
255{ 230{
256 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 231 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
257 232
258 if ( l == Led_Power ) { 233 if ( l == Led_Power ) {
259 if ( fd >= 0 ) { 234 if ( fd >= 0 ) {
260 LED_IN leds; 235 LED_IN leds;
261 ::memset ( &leds, 0, sizeof( leds )); 236 ::memset ( &leds, 0, sizeof( leds ));
262 leds. TotalTime = 0; 237 leds. TotalTime = 0;
263 leds. OnTime = 0; 238 leds. OnTime = 0;
264 leds. OffTime = 1; 239 leds. OffTime = 1;
265 leds. OffOnBlink = 2; 240 leds. OffOnBlink = 2;
266 241
267 switch ( st ) { 242 switch ( st ) {
268 case Led_Off : leds. OffOnBlink = 0; break; 243 case Led_Off : leds. OffOnBlink = 0; break;
269 case Led_On : leds. OffOnBlink = 1; break; 244 case Led_On : leds. OffOnBlink = 1; break;
270 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break; 245 case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
271 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break; 246 case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
272 } 247 }
273 248
274 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) { 249 if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
275 m_leds [0] = st; 250 m_leds [0] = st;
276 return true; 251 return true;
277 } 252 }
278 } 253 }
279 } 254 }
280 return false; 255 return false;
281} 256}
282 257
283 258
284bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 259bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
285{ 260{
286 int newkeycode = keycode; 261 int newkeycode = keycode;
287 262
288 switch ( keycode ) { 263 switch ( keycode ) {
289 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 264 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
290 case HardKey_Menu: { 265 case HardKey_Menu: {
291 if (( d->m_model == Model_iPAQ_H38xx ) || 266 if (( d->m_model == Model_iPAQ_H38xx ) ||
292 ( d->m_model == Model_iPAQ_H39xx ) || 267 ( d->m_model == Model_iPAQ_H39xx ) ||
293 ( d->m_model == Model_iPAQ_H5xxx)) { 268 ( d->m_model == Model_iPAQ_H5xxx)) {
294 newkeycode = HardKey_Mail; 269 newkeycode = HardKey_Mail;
295 } 270 }
296 break; 271 break;
297 } 272 }
298 273
299 // Rotate cursor keys 180° or 270° 274 // Rotate cursor keys 180° or 270°
300 case Key_Left : 275 case Key_Left :
301 case Key_Right: 276 case Key_Right:
302 case Key_Up : 277 case Key_Up :
303 case Key_Down : { 278 case Key_Down : {
304 if (( d->m_model == Model_iPAQ_H31xx ) || 279 if (( d->m_model == Model_iPAQ_H31xx ) ||
305 ( d->m_model == Model_iPAQ_H38xx )) { 280 ( d->m_model == Model_iPAQ_H38xx )) {
306 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 281 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
307 } 282 }
308 // Rotate the cursor keys by 270° 283 // Rotate the cursor keys by 270°
309 // keycode - Key_Left = position of the button starting from left clockwise 284 // keycode - Key_Left = position of the button starting from left clockwise
310 // add the rotation to it and modolo. No we've the original offset 285 // add the rotation to it and modolo. No we've the original offset
311 // add the offset to the Key_Left key 286 // add the offset to the Key_Left key
diff --git a/libopie2/opiecore/device/odevice_jornada.cpp b/libopie2/opiecore/device/odevice_jornada.cpp
index 1f69326..5d32901 100644
--- a/libopie2/opiecore/device/odevice_jornada.cpp
+++ b/libopie2/opiecore/device/odevice_jornada.cpp
@@ -1,219 +1,208 @@
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_jornada.h" 30#include "odevice_jornada.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
80using namespace Opie::Core; 80using namespace Opie::Core;
81using namespace Opie::Core::Internal; 81using namespace Opie::Core::Internal;
82 82
83struct j_button jornada56x_buttons [] = { 83struct j_button jornada56x_buttons [] = {
84 { Model_Jornada_56x, 84 { Model_Jornada_56x,
85 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 85 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
86 "devicebuttons/jornada56x_calendar", 86 "devicebuttons/jornada56x_calendar",
87 "datebook", "nextView()", 87 "datebook", "nextView()",
88 "today", "raise()" }, 88 "today", "raise()" },
89 { Model_Jornada_56x, 89 { Model_Jornada_56x,
90 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 90 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
91 "devicebuttons/jornada56x_contact", 91 "devicebuttons/jornada56x_contact",
92 "addressbook", "raise()", 92 "addressbook", "raise()",
93 "addressbook", "beamBusinessCard()" }, 93 "addressbook", "beamBusinessCard()" },
94 { Model_Jornada_56x, 94 { Model_Jornada_56x,
95 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Todo Button"), 95 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Todo Button"),
96 "devicebuttons/jornada56x_todo", 96 "devicebuttons/jornada56x_todo",
97 "todolist", "raise()", 97 "todolist", "raise()",
98 "todolist", "create()" }, 98 "todolist", "create()" },
99 { Model_Jornada_56x, 99 { Model_Jornada_56x,
100 Qt::Key_F8, QT_TRANSLATE_NOOP("Button", "Home Button"), 100 Qt::Key_F8, QT_TRANSLATE_NOOP("Button", "Home Button"),
101 "devicebuttons/jornada56x_home", 101 "devicebuttons/jornada56x_home",
102 "QPE/Launcher", "home()", 102 "QPE/Launcher", "home()",
103 "buttonsettings", "raise()" }, 103 "buttonsettings", "raise()" },
104 { Model_Jornada_56x, 104 { Model_Jornada_56x,
105 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Record Button"), 105 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Record Button"),
106 "devicebuttons/jornada56x_record", 106 "devicebuttons/jornada56x_record",
107 "QPE/VMemo", "toggleRecord()", 107 "QPE/VMemo", "toggleRecord()",
108 "sound", "raise()" }, 108 "sound", "raise()" },
109}; 109};
110 110
111void Jornada::init(const QString&) 111void Jornada::init(const QString&)
112{ 112{
113 d->m_vendorstr = "HP"; 113 d->m_vendorstr = "HP";
114 d->m_vendor = Vendor_HP; 114 d->m_vendor = Vendor_HP;
115 d->m_modelstr = "Jornada 56x"; 115 d->m_modelstr = "Jornada 56x";
116 d->m_model = Model_Jornada_56x; 116 d->m_model = Model_Jornada_56x;
117 d->m_systemstr = "Familiar";
118 d->m_system = System_Familiar;
119 d->m_rotation = Rot0; 117 d->m_rotation = Rot0;
120 118 //Distribution detecting code is now in base class
121 QFile f ( "/etc/familiar-version" );
122 f.setName ( "/etc/familiar-version" );
123 if ( f.open ( IO_ReadOnly )) {
124
125 QTextStream ts ( &f );
126 d->m_sysverstr = ts.readLine().mid( 10 );
127
128 f. close();
129 }
130} 119}
131 120
132void Jornada::initButtons() 121void Jornada::initButtons()
133{ 122{
134 if ( d->m_buttons ) 123 if ( d->m_buttons )
135 return; 124 return;
136 125
137 d->m_buttons = new QValueList <ODeviceButton>; 126 d->m_buttons = new QValueList <ODeviceButton>;
138 127
139 for ( uint i = 0; i < ( sizeof( jornada56x_buttons ) / sizeof( j_button )); i++ ) { 128 for ( uint i = 0; i < ( sizeof( jornada56x_buttons ) / sizeof( j_button )); i++ ) {
140 j_button *ib = jornada56x_buttons + i; 129 j_button *ib = jornada56x_buttons + i;
141 ODeviceButton b; 130 ODeviceButton b;
142 131
143 if (( ib->model & d->m_model ) == d->m_model ) { 132 if (( ib->model & d->m_model ) == d->m_model ) {
144 b. setKeycode ( ib->code ); 133 b. setKeycode ( ib->code );
145 b. setUserText ( QObject::tr ( "Button", ib->utext )); 134 b. setUserText ( QObject::tr ( "Button", ib->utext ));
146 b. setPixmap ( Resource::loadPixmap ( ib->pix )); 135 b. setPixmap ( Resource::loadPixmap ( ib->pix ));
147 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction )); 136 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction ));
148 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction )); 137 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction ));
149 138
150 d->m_buttons->append ( b ); 139 d->m_buttons->append ( b );
151 } 140 }
152 } 141 }
153 reloadButtonMapping(); 142 reloadButtonMapping();
154 143
155 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 144 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
156 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&))); 145 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
157} 146}
158 147
159int Jornada::displayBrightnessResolution() const 148int Jornada::displayBrightnessResolution() const
160{ 149{
161 return 255; 150 return 255;
162} 151}
163 152
164 153
165bool Jornada::setDisplayBrightness( int bright ) 154bool Jornada::setDisplayBrightness( int bright )
166{ 155{
167 bool res = false; 156 bool res = false;
168 157
169 if ( bright > 255 ) 158 if ( bright > 255 )
170 bright = 255; 159 bright = 255;
171 if ( bright < 0 ) 160 if ( bright < 0 )
172 bright = 0; 161 bright = 0;
173 162
174 QString cmdline; 163 QString cmdline;
175 164
176 int value = 255 - bright; 165 int value = 255 - bright;
177 if ( !bright ) 166 if ( !bright )
178 cmdline = QString().sprintf( "echo 4 > /sys/class/backlight/sa1100fb/power"); 167 cmdline = QString().sprintf( "echo 4 > /sys/class/backlight/sa1100fb/power");
179 else 168 else
180 cmdline = QString().sprintf( "echo 0 > /sys/class/backlight/sa1100fb/power; echo %d > /sys/class/backlight/sa1100fb/brightness", value ); 169 cmdline = QString().sprintf( "echo 0 > /sys/class/backlight/sa1100fb/power; echo %d > /sys/class/backlight/sa1100fb/brightness", value );
181 170
182 res = ( ::system( (const char*) cmdline ) == 0 ); 171 res = ( ::system( (const char*) cmdline ) == 0 );
183 172
184 return res; 173 return res;
185} 174}
186 175
187 176
188bool Jornada::suspend( ) 177bool Jornada::suspend( )
189{ 178{
190 qDebug("ODevice::suspend"); 179 qDebug("ODevice::suspend");
191 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 180 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
192 return false; 181 return false;
193 182
194 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 183 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
195 return false; 184 return false;
196 185
197 bool res = false; 186 bool res = false;
198 ODevice::sendSuspendmsg(); 187 ODevice::sendSuspendmsg();
199 188
200 struct timeval tvs; 189 struct timeval tvs;
201 ::gettimeofday ( &tvs, 0 ); 190 ::gettimeofday ( &tvs, 0 );
202 191
203 ::sync(); // flush fs caches 192 ::sync(); // flush fs caches
204 res = ( ::system ( "apm --suspend" ) == 0 ); 193 res = ( ::system ( "apm --suspend" ) == 0 );
205 194
206 return res; 195 return res;
207} 196}
208 197
209bool Jornada::setDisplayStatus ( bool on ) 198bool Jornada::setDisplayStatus ( bool on )
210{ 199{
211 bool res = false; 200 bool res = false;
212 201
213 QString cmdline = QString().sprintf( "echo %d > /sys/class/lcd/sa1100fb/power; echo %d > /sys/class/backlight/sa1100fb/power", on ? "0" : "4", on? "0" : "4" ); 202 QString cmdline = QString().sprintf( "echo %d > /sys/class/lcd/sa1100fb/power; echo %d > /sys/class/backlight/sa1100fb/power", on ? "0" : "4", on? "0" : "4" );
214 203
215 res = ( ::system( (const char*) cmdline ) == 0 ); 204 res = ( ::system( (const char*) cmdline ) == 0 );
216 205
217 return res; 206 return res;
218} 207}
219 208
diff --git a/libopie2/opiecore/device/odevice_ramses.cpp b/libopie2/opiecore/device/odevice_ramses.cpp
index 32467f1..7db2af1 100644
--- a/libopie2/opiecore/device/odevice_ramses.cpp
+++ b/libopie2/opiecore/device/odevice_ramses.cpp
@@ -1,223 +1,213 @@
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_ramses.h" 30#include "odevice_ramses.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::Core; 56using namespace Opie::Core;
57using namespace Opie::Core::Internal; 57using namespace Opie::Core::Internal;
58 58
59struct r_button ramses_buttons [] = { 59struct r_button ramses_buttons [] = {
60 { Model_Ramses_MNCI, 60 { Model_Ramses_MNCI,
61 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 61 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
62 "devicebuttons/z_menu", 62 "devicebuttons/z_menu",
63 "QPE/TaskBar", "toggleMenu()", 63 "QPE/TaskBar", "toggleMenu()",
64 "QPE/TaskBar", "toggleStartMenu()" }, 64 "QPE/TaskBar", "toggleStartMenu()" },
65 { Model_Ramses_MNCI, 65 { Model_Ramses_MNCI,
66 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 66 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
67 "devicebuttons/ipaq_home", 67 "devicebuttons/ipaq_home",
68 "QPE/Launcher", "home()", 68 "QPE/Launcher", "home()",
69 "buttonsettings", "raise()" }, 69 "buttonsettings", "raise()" },
70}; 70};
71 71
72void Ramses::init(const QString&) 72void Ramses::init(const QString&)
73{ 73{
74 d->m_vendorstr = "M und N"; 74 d->m_vendorstr = "M und N";
75 d->m_vendor = Vendor_MundN; 75 d->m_vendor = Vendor_MundN;
76 76
77 QFile f("/proc/sys/board/ramses"); 77 QFile f("/proc/sys/board/ramses");
78 78
79 d->m_modelstr = "Ramses"; 79 d->m_modelstr = "Ramses";
80 d->m_model = Model_Ramses_MNCI; 80 d->m_model = Model_Ramses_MNCI;
81 81
82 d->m_rotation = Rot0; 82 d->m_rotation = Rot0;
83 d->m_holdtime = 1000; 83 d->m_holdtime = 1000;
84 84
85 f.setName("/etc/oz_version"); 85 // Distribution detection code now in the base class
86
87 if (f.open(IO_ReadOnly)) {
88 d->m_systemstr = "OpenEmbedded/Ramses";
89 d->m_system = System_OpenZaurus;
90
91 QTextStream ts(&f);
92 ts.setDevice(&f);
93 d->m_sysverstr = ts.readLine();
94 f.close();
95 }
96 86
97 m_power_timer = 0; 87 m_power_timer = 0;
98 88
99#ifdef QT_QWS_ALLOW_OVERCLOCK 89#ifdef QT_QWS_ALLOW_OVERCLOCK
100#warning *** Overclocking enabled - this may fry your hardware - you have been warned *** 90#warning *** Overclocking enabled - this may fry your hardware - you have been warned ***
101#define OC(x...) x 91#define OC(x...) x
102#else 92#else
103#define OC(x...) 93#define OC(x...)
104#endif 94#endif
105 95
106 // This table is true for a Intel XScale PXA 255 96 // This table is true for a Intel XScale PXA 255
107 97
108 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50 98 d->m_cpu_frequencies->append("99000"); // mem= 99, run= 99, turbo= 99, PXbus= 50
109OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem 99OC(d->m_cpu_frequencies->append("118000"); ) // mem=118, run=118, turbo=118, PXbus= 59 OC'd mem
110 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99 100 d->m_cpu_frequencies->append("199100"); // mem= 99, run=199, turbo=199, PXbus= 99
111OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem 101OC(d->m_cpu_frequencies->append("236000"); ) // mem=118, run=236, turbo=236, PXbus=118 OC'd mem
112 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99 102 d->m_cpu_frequencies->append("298600"); // mem= 99, run=199, turbo=298, PXbus= 99
113OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem 103OC(d->m_cpu_frequencies->append("354000"); ) // mem=118, run=236, turbo=354, PXbus=118 OC'd mem
114 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99 104 d->m_cpu_frequencies->append("398099"); // mem= 99, run=199, turbo=398, PXbus= 99
115 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196 105 d->m_cpu_frequencies->append("398100"); // mem= 99, run=398, turbo=398, PXbus=196
116OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus 106OC(d->m_cpu_frequencies->append("471000"); ) // mem=118, run=471, turbo=471, PXbus=236 OC'd mem/core/bus
117 107
118} 108}
119 109
120bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat) 110bool Ramses::filter(int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat)
121{ 111{
122 Q_UNUSED( keycode ); 112 Q_UNUSED( keycode );
123 Q_UNUSED( modifiers ); 113 Q_UNUSED( modifiers );
124 Q_UNUSED( isPress ); 114 Q_UNUSED( isPress );
125 Q_UNUSED( autoRepeat ); 115 Q_UNUSED( autoRepeat );
126 return false; 116 return false;
127} 117}
128 118
129void Ramses::timerEvent(QTimerEvent *) 119void Ramses::timerEvent(QTimerEvent *)
130{ 120{
131 killTimer(m_power_timer); 121 killTimer(m_power_timer);
132 m_power_timer = 0; 122 m_power_timer = 0;
133 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false); 123 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false);
134 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false); 124 QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false);
135} 125}
136 126
137 127
138bool Ramses::setSoftSuspend(bool soft) 128bool Ramses::setSoftSuspend(bool soft)
139{ 129{
140 qDebug("Ramses::setSoftSuspend(%d)", soft); 130 qDebug("Ramses::setSoftSuspend(%d)", soft);
141#if 0 131#if 0
142 bool res = false; 132 bool res = false;
143 int fd; 133 int fd;
144 134
145 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) || 135 if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) ||
146 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) { 136 ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) {
147 137
148 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources 138 int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources
149 139
150 if (sources >= 0) { 140 if (sources >= 0) {
151 if (soft) 141 if (soft)
152 sources &= ~APM_EVT_POWER_BUTTON; 142 sources &= ~APM_EVT_POWER_BUTTON;
153 else 143 else
154 sources |= APM_EVT_POWER_BUTTON; 144 sources |= APM_EVT_POWER_BUTTON;
155 145
156 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources 146 if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources
157 res = true; 147 res = true;
158 else 148 else
159 perror("APM_IOCGEVTSRC"); 149 perror("APM_IOCGEVTSRC");
160 } 150 }
161 else 151 else
162 perror("APM_IOCGEVTSRC"); 152 perror("APM_IOCGEVTSRC");
163 153
164 ::close(fd); 154 ::close(fd);
165 } 155 }
166 else 156 else
167 perror("/dev/apm_bios or /dev/misc/apm_bios"); 157 perror("/dev/apm_bios or /dev/misc/apm_bios");
168 158
169 return res; 159 return res;
170#else 160#else
171 return true; 161 return true;
172#endif 162#endif
173} 163}
174 164
175bool Ramses::suspend() 165bool Ramses::suspend()
176{ 166{
177 qDebug("Ramses::suspend"); 167 qDebug("Ramses::suspend");
178 return false; 168 return false;
179} 169}
180 170
181/** 171/**
182* This sets the display on or off 172* This sets the display on or off
183*/ 173*/
184bool Ramses::setDisplayStatus(bool on) 174bool Ramses::setDisplayStatus(bool on)
185{ 175{
186 qDebug("Ramses::setDisplayStatus(%d)", on); 176 qDebug("Ramses::setDisplayStatus(%d)", on);
187#if 0 177#if 0
188 bool res = false; 178 bool res = false;
189 int fd; 179 int fd;
190 180
191 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) { 181 if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) {
192 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0); 182 res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0);
193 ::close(fd); 183 ::close(fd);
194 } 184 }
195 return res; 185 return res;
196#else 186#else
197 return true; 187 return true;
198#endif 188#endif
199} 189}
200 190
201 191
202/* 192/*
203* We get something between 0..255 into us 193* We get something between 0..255 into us
204*/ 194*/
205bool Ramses::setDisplayBrightness(int bright) 195bool Ramses::setDisplayBrightness(int bright)
206{ 196{
207 qDebug("Ramses::setDisplayBrightness(%d)", bright); 197 qDebug("Ramses::setDisplayBrightness(%d)", bright);
208 bool res = false; 198 bool res = false;
209 int fd; 199 int fd;
210 200
211 // pwm1 brighness: 20 steps 500..0 (dunkel->hell) 201 // pwm1 brighness: 20 steps 500..0 (dunkel->hell)
212 202
213 if (bright > 255 ) 203 if (bright > 255 )
214 bright = 255; 204 bright = 255;
215 if (bright < 0) 205 if (bright < 0)
216 bright = 0; 206 bright = 0;
217 207
218 // Turn backlight completely off 208 // Turn backlight completely off
219 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) { 209 if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) {
220 char writeCommand[10]; 210 char writeCommand[10];
221 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0); 211 const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0);
222 res = (::write(fd, writeCommand, count) != -1); 212 res = (::write(fd, writeCommand, count) != -1);
223 ::close(fd); 213 ::close(fd);
diff --git a/libopie2/opiecore/device/odevice_simpad.cpp b/libopie2/opiecore/device/odevice_simpad.cpp
index 6630763..6d4624b 100644
--- a/libopie2/opiecore/device/odevice_simpad.cpp
+++ b/libopie2/opiecore/device/odevice_simpad.cpp
@@ -1,286 +1,265 @@
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::Core; 56using namespace Opie::Core;
57using namespace Opie::Core::Internal; 57using namespace Opie::Core::Internal;
58 58
59struct s_button simpad_buttons [] = { 59struct s_button simpad_buttons [] = {
60 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 60 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
61 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"), 61 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Lower+Up"),
62 "devicebuttons/simpad_lower_up", 62 "devicebuttons/simpad_lower_up",
63 "datebook", "nextView()", 63 "datebook", "nextView()",
64 "today", "raise()" }, 64 "today", "raise()" },
65 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 65 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
66 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"), 66 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Lower+Down"),
67 "devicebuttons/simpad_lower_down", 67 "devicebuttons/simpad_lower_down",
68 "addressbook", "raise()", 68 "addressbook", "raise()",
69 "addressbook", "beamBusinessCard()" }, 69 "addressbook", "beamBusinessCard()" },
70 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 70 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
71 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"), 71 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Lower+Right"),
72 "devicebuttons/simpad_lower_right", 72 "devicebuttons/simpad_lower_right",
73 "QPE/TaskBar", "toggleMenu()", 73 "QPE/TaskBar", "toggleMenu()",
74 "QPE/TaskBar", "toggleStartMenu()" }, 74 "QPE/TaskBar", "toggleStartMenu()" },
75 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 75 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
76 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"), 76 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Lower+Left"),
77 "devicebuttons/simpad_lower_left", 77 "devicebuttons/simpad_lower_left",
78 "opiemail", "raise()", 78 "opiemail", "raise()",
79 "opiemail", "newMail()" }, 79 "opiemail", "newMail()" },
80 80
81 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 81 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
82 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"), 82 Qt::Key_F5, QT_TRANSLATE_NOOP("Button", "Upper+Up"),
83 "devicebuttons/simpad_upper_up", 83 "devicebuttons/simpad_upper_up",
84 "QPE/Launcher", "home()", 84 "QPE/Launcher", "home()",
85 "buttonsettings", "raise()" }, 85 "buttonsettings", "raise()" },
86 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 86 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
87 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"), 87 Qt::Key_F6, QT_TRANSLATE_NOOP("Button", "Upper+Down"),
88 "devicebuttons/simpad_upper_down", 88 "devicebuttons/simpad_upper_down",
89 "addressbook", "raise()", 89 "addressbook", "raise()",
90 "addressbook", "beamBusinessCard()" }, 90 "addressbook", "beamBusinessCard()" },
91 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 91 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
92 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"), 92 Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Upper+Right"),
93 "devicebuttons/simpad_upper_right", 93 "devicebuttons/simpad_upper_right",
94 "QPE/TaskBar", "toggleMenu()", 94 "QPE/TaskBar", "toggleMenu()",
95 "QPE/TaskBar", "toggleStartMenu()" }, 95 "QPE/TaskBar", "toggleStartMenu()" },
96 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 96 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
97 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"), 97 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Upper+Left"),
98 "devicebuttons/simpad_upper_left", 98 "devicebuttons/simpad_upper_left",
99 "QPE/Rotation", "flip()", 99 "QPE/Rotation", "flip()",
100 "QPE/Rotation", "flip()" }, 100 "QPE/Rotation", "flip()" },
101 /* 101 /*
102 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 102 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
103 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 103 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
104 "devicebuttons/simpad_lower_upper", 104 "devicebuttons/simpad_lower_upper",
105 "QPE/Launcher", "home()", 105 "QPE/Launcher", "home()",
106 "buttonsettings", "raise()" }, 106 "buttonsettings", "raise()" },
107 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus, 107 { Model_SIMpad_CL4 | Model_SIMpad_SL4 | Model_SIMpad_SLC | Model_SIMpad_TSinus,
108 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"), 108 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Lower+Upper"),
109 "devicebuttons/simpad_upper_lower", 109 "devicebuttons/simpad_upper_lower",
110 "QPE/Launcher", "home()", 110 "QPE/Launcher", "home()",
111 "buttonsettings", "raise()" }, 111 "buttonsettings", "raise()" },
112 */ 112 */
113}; 113};
114 114
115void SIMpad::init(const QString&) 115void SIMpad::init(const QString&)
116{ 116{
117 d->m_vendorstr = "SIEMENS"; 117 d->m_vendorstr = "SIEMENS";
118 d->m_vendor = Vendor_SIEMENS; 118 d->m_vendor = Vendor_SIEMENS;
119 119
120 QFile f ( "/proc/hal/model" ); 120 QFile f ( "/proc/hal/model" );
121 121
122 //TODO Implement model checking 122 //TODO Implement model checking
123 //FIXME For now we assume an SL4 123 //FIXME For now we assume an SL4
124 124
125 d->m_modelstr = "SL4"; 125 d->m_modelstr = "SL4";
126 d->m_model = Model_SIMpad_SL4; 126 d->m_model = Model_SIMpad_SL4;
127 127
128 switch ( d->m_model ) { 128 switch ( d->m_model ) {
129 default: 129 default:
130 d->m_rotation = Rot0; 130 d->m_rotation = Rot0;
131 d->m_direction = CCW; 131 d->m_direction = CCW;
132 d->m_holdtime = 1000; // 1000ms 132 d->m_holdtime = 1000; // 1000ms
133 133
134 break; 134 break;
135 } 135 }
136 136
137 f. setName ( "/etc/familiar-version" ); 137 //Distribution detecting code is now in base class
138 if ( f. open ( IO_ReadOnly )) {
139 d->m_systemstr = "Familiar";
140 d->m_system = System_Familiar;
141
142 QTextStream ts ( &f );
143 d->m_sysverstr = ts. readLine(). mid ( 10 );
144
145 f. close();
146 } else {
147 f. setName ( "/etc/oz_version" );
148
149 if ( f. open ( IO_ReadOnly )) {
150 d->m_systemstr = "OpenEmbedded/SIMpad";
151 d->m_system = System_OpenZaurus;
152
153 QTextStream ts ( &f );
154 ts.setDevice ( &f );
155 d->m_sysverstr = ts. readLine();
156 f. close();
157 }
158 }
159 138
160 m_leds [0] = m_leds [1] = Led_Off; 139 m_leds [0] = m_leds [1] = Led_Off;
161 140
162 m_power_timer = 0; 141 m_power_timer = 0;
163 142
164} 143}
165 144
166void SIMpad::initButtons() 145void SIMpad::initButtons()
167{ 146{
168 if ( d->m_buttons ) 147 if ( d->m_buttons )
169 return; 148 return;
170 149
171 if ( isQWS( ) ) 150 if ( isQWS( ) )
172 QWSServer::setKeyboardFilter ( this ); 151 QWSServer::setKeyboardFilter ( this );
173 152
174 d->m_buttons = new QValueList <ODeviceButton>; 153 d->m_buttons = new QValueList <ODeviceButton>;
175 154
176 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) { 155 for ( uint i = 0; i < ( sizeof( simpad_buttons ) / sizeof( s_button )); i++ ) {
177 s_button *sb = simpad_buttons + i; 156 s_button *sb = simpad_buttons + i;
178 ODeviceButton b; 157 ODeviceButton b;
179 158
180 if (( sb->model & d->m_model ) == d->m_model ) { 159 if (( sb->model & d->m_model ) == d->m_model ) {
181 b. setKeycode ( sb->code ); 160 b. setKeycode ( sb->code );
182 b. setUserText ( QObject::tr ( "Button", sb->utext )); 161 b. setUserText ( QObject::tr ( "Button", sb->utext ));
183 b. setPixmap ( Resource::loadPixmap ( sb->pix )); 162 b. setPixmap ( Resource::loadPixmap ( sb->pix ));
184 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb->fpressedservice ), sb->fpressedaction )); 163 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( sb->fpressedservice ), sb->fpressedaction ));
185 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb->fheldservice ), sb->fheldaction )); 164 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( sb->fheldservice ), sb->fheldaction ));
186 165
187 d->m_buttons->append ( b ); 166 d->m_buttons->append ( b );
188 } 167 }
189 } 168 }
190 reloadButtonMapping(); 169 reloadButtonMapping();
191 170
192 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 171 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
193 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&))); 172 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
194} 173}
195 174
196// SIMpad boardcontrol register CS3 175// SIMpad boardcontrol register CS3
197#define SIMPAD_BOARDCONTROL "/proc/cs3" 176#define SIMPAD_BOARDCONTROL "/proc/cs3"
198#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA 177#define SIMPAD_VCC_5V_EN 0x0001 // For 5V PCMCIA
199#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA 178#define SIMPAD_VCC_3V_EN 0x0002 // FOR 3.3V PCMCIA
200#define SIMPAD_EN1 0x0004 // This is only for EPROM's 179#define SIMPAD_EN1 0x0004 // This is only for EPROM's
201#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V 180#define SIMPAD_EN0 0x0008 // Both should be enable for 3.3V or 5V
202#define SIMPAD_DISPLAY_ON 0x0010 181#define SIMPAD_DISPLAY_ON 0x0010
203#define SIMPAD_PCMCIA_BUFF_DIS 0x0020 182#define SIMPAD_PCMCIA_BUFF_DIS 0x0020
204#define SIMPAD_MQ_RESET 0x0040 183#define SIMPAD_MQ_RESET 0x0040
205#define SIMPAD_PCMCIA_RESET 0x0080 184#define SIMPAD_PCMCIA_RESET 0x0080
206#define SIMPAD_DECT_POWER_ON 0x0100 185#define SIMPAD_DECT_POWER_ON 0x0100
207#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave 186#define SIMPAD_IRDA_SD 0x0200 // Shutdown for powersave
208#define SIMPAD_RS232_ON 0x0400 187#define SIMPAD_RS232_ON 0x0400
209#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave 188#define SIMPAD_SD_MEDIAQ 0x0800 // Shutdown for powersave
210#define SIMPAD_LED2_ON 0x1000 189#define SIMPAD_LED2_ON 0x1000
211#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode 190#define SIMPAD_IRDA_MODE 0x2000 // Fast/Slow IrDA mode
212#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit 191#define SIMPAD_ENABLE_5V 0x4000 // Enable 5V circuit
213#define SIMPAD_RESET_SIMCARD 0x8000 192#define SIMPAD_RESET_SIMCARD 0x8000
214 193
215//SIMpad touchscreen backlight strength control 194//SIMpad touchscreen backlight strength control
216#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL" 195#define SIMPAD_BACKLIGHT_CONTROL "/proc/driver/mq200/registers/PWM_CONTROL"
217#define SIMPAD_BACKLIGHT_MASK 0x00a10044 196#define SIMPAD_BACKLIGHT_MASK 0x00a10044
218 197
219QValueList <OLed> SIMpad::ledList() const 198QValueList <OLed> SIMpad::ledList() const
220{ 199{
221 QValueList <OLed> vl; 200 QValueList <OLed> vl;
222 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one? 201 vl << Led_Power; //FIXME which LED is LED2 ? The green one or the amber one?
223 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway 202 //vl << Led_Mail; //TODO find out if LED1 is accessible anyway
224 return vl; 203 return vl;
225} 204}
226 205
227QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const 206QValueList <OLedState> SIMpad::ledStateList ( OLed l ) const
228{ 207{
229 QValueList <OLedState> vl; 208 QValueList <OLedState> vl;
230 209
231 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one? 210 if ( l == Led_Power ) //FIXME which LED is LED2 ? The green one or the amber one?
232 vl << Led_Off << Led_On; 211 vl << Led_Off << Led_On;
233 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway 212 //else if ( l == Led_Mail ) //TODO find out if LED1 is accessible anyway
234 //vl << Led_Off; 213 //vl << Led_Off;
235 return vl; 214 return vl;
236} 215}
237 216
238OLedState SIMpad::ledState ( OLed l ) const 217OLedState SIMpad::ledState ( OLed l ) const
239{ 218{
240 switch ( l ) { 219 switch ( l ) {
241 case Led_Power: 220 case Led_Power:
242 return m_leds [0]; 221 return m_leds [0];
243 //case Led_Mail: 222 //case Led_Mail:
244 //return m_leds [1]; 223 //return m_leds [1];
245 default: 224 default:
246 return Led_Off; 225 return Led_Off;
247 } 226 }
248} 227}
249 228
250bool SIMpad::setLedState ( OLed l, OLedState st ) 229bool SIMpad::setLedState ( OLed l, OLedState st )
251{ 230{
252#if 0 231#if 0
253 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK ); 232 static int fd = ::open ( SIMPAD_BOARDCONTROL, O_RDWR | O_NONBLOCK );
254 233
255 /*TODO Implement this like that: 234 /*TODO Implement this like that:
256 read from cs3 235 read from cs3
257 && with SIMPAD_LED2_ON 236 && with SIMPAD_LED2_ON
258 write to cs3 */ 237 write to cs3 */
259 m_leds [0] = st; 238 m_leds [0] = st;
260 return true; 239 return true;
261 } 240 }
262 } 241 }
263 } 242 }
264 243
265#endif 244#endif
266 return false; 245 return false;
267} 246}
268 247
269 248
270bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 249bool SIMpad::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
271{ 250{
272 //TODO 251 //TODO
273 return false; 252 return false;
274} 253}
275 254
276void SIMpad::timerEvent ( QTimerEvent * ) 255void SIMpad::timerEvent ( QTimerEvent * )
277{ 256{
278 killTimer ( m_power_timer ); 257 killTimer ( m_power_timer );
279 m_power_timer = 0; 258 m_power_timer = 0;
280 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false ); 259 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
281 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false ); 260 QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
282} 261}
283 262
284 263
285void SIMpad::playAlarmSound() 264void SIMpad::playAlarmSound()
286{ 265{
diff --git a/libopie2/opiecore/device/odevice_yopy.cpp b/libopie2/opiecore/device/odevice_yopy.cpp
index 493ed25..223aa76 100644
--- a/libopie2/opiecore/device/odevice_yopy.cpp
+++ b/libopie2/opiecore/device/odevice_yopy.cpp
@@ -1,164 +1,155 @@
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_yopy.h" 30#include "odevice_yopy.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::Core; 56using namespace Opie::Core;
57using namespace Opie::Core::Internal; 57using namespace Opie::Core::Internal;
58 58
59struct yopy_button yopy_buttons [] = { 59struct yopy_button yopy_buttons [] = {
60 { Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Action Button" ), 60 { Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Action Button" ),
61 "devicebuttons/yopy_action", 61 "devicebuttons/yopy_action",
62 "datebook", "nextView()", 62 "datebook", "nextView()",
63 "today", "raise()" }, 63 "today", "raise()" },
64 { Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "OK Button" ), 64 { Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "OK Button" ),
65 "devicebuttons/yopy_ok", 65 "devicebuttons/yopy_ok",
66 "addressbook", "raise()", 66 "addressbook", "raise()",
67 "addressbook", "beamBusinessCard()" }, 67 "addressbook", "beamBusinessCard()" },
68 { Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "End Button" ), 68 { Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "End Button" ),
69 "devicebuttons/yopy_end", 69 "devicebuttons/yopy_end",
70 "QPE/Launcher", "home()", 70 "QPE/Launcher", "home()",
71 "buttonsettings", "raise()" }, 71 "buttonsettings", "raise()" },
72}; 72};
73 73
74void Yopy::init(const QString&) 74void Yopy::init(const QString&)
75{ 75{
76 d->m_vendorstr = "G.Mate"; 76 d->m_vendorstr = "G.Mate";
77 d->m_vendor = Vendor_GMate; 77 d->m_vendor = Vendor_GMate;
78 d->m_modelstr = "Yopy3700"; 78 d->m_modelstr = "Yopy3700";
79 d->m_model = Model_Yopy_3700; 79 d->m_model = Model_Yopy_3700;
80 d->m_rotation = Rot0; 80 d->m_rotation = Rot0;
81
82 d->m_systemstr = "Linupy"; 81 d->m_systemstr = "Linupy";
83 d->m_system = System_Linupy; 82 d->m_system = System_Linupy;
84 83 // Distribution detection code now in the base class
85 QFile f ( "/etc/issue" );
86 if ( f. open ( IO_ReadOnly ) )
87 {
88 QTextStream ts ( &f );
89 ts.readLine();
90 d->m_sysverstr = ts. readLine();
91 f. close();
92 }
93} 84}
94 85
95 86
96void Yopy::initButtons() 87void Yopy::initButtons()
97{ 88{
98 if ( d->m_buttons ) 89 if ( d->m_buttons )
99 return ; 90 return ;
100 91
101 d->m_buttons = new QValueList <ODeviceButton>; 92 d->m_buttons = new QValueList <ODeviceButton>;
102 93
103 for ( uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof( yopy_button ) ); i++ ) 94 for ( uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof( yopy_button ) ); i++ )
104 { 95 {
105 96
106 yopy_button *ib = yopy_buttons + i; 97 yopy_button *ib = yopy_buttons + i;
107 98
108 ODeviceButton b; 99 ODeviceButton b;
109 100
110 b. setKeycode ( ib->code ); 101 b. setKeycode ( ib->code );
111 b. setUserText ( QObject::tr ( "Button", ib->utext ) ); 102 b. setUserText ( QObject::tr ( "Button", ib->utext ) );
112 b. setPixmap ( Resource::loadPixmap ( ib->pix ) ); 103 b. setPixmap ( Resource::loadPixmap ( ib->pix ) );
113 b. setFactoryPresetPressedAction 104 b. setFactoryPresetPressedAction
114 ( OQCopMessage( makeChannel( ib->fpressedservice ), ib->fpressedaction ) ); 105 ( OQCopMessage( makeChannel( ib->fpressedservice ), ib->fpressedaction ) );
115 b. setFactoryPresetHeldAction 106 b. setFactoryPresetHeldAction
116 ( OQCopMessage( makeChannel( ib->fheldservice ), ib->fheldaction ) ); 107 ( OQCopMessage( makeChannel( ib->fheldservice ), ib->fheldaction ) );
117 108
118 d->m_buttons->append ( b ); 109 d->m_buttons->append ( b );
119 } 110 }
120 reloadButtonMapping(); 111 reloadButtonMapping();
121 112
122 QCopChannel *sysch = new QCopChannel( "QPE/System", this ); 113 QCopChannel *sysch = new QCopChannel( "QPE/System", this );
123 connect( sysch, SIGNAL( received(const QCString&,const QByteArray&) ), 114 connect( sysch, SIGNAL( received(const QCString&,const QByteArray&) ),
124 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) ); 115 this, SLOT( systemMessage(const QCString&,const QByteArray&) ) );
125} 116}
126 117
127 118
128bool Yopy::suspend() 119bool Yopy::suspend()
129{ 120{
130 /* Opie for Yopy does not implement its own power management at the 121 /* Opie for Yopy does not implement its own power management at the
131 moment. The public version runs parallel to X, and relies on the 122 moment. The public version runs parallel to X, and relies on the
132 existing power management features. */ 123 existing power management features. */
133 return false; 124 return false;
134} 125}
135 126
136 127
137bool Yopy::setDisplayBrightness( int bright ) 128bool Yopy::setDisplayBrightness( int bright )
138{ 129{
139 /* The code here works, but is disabled as the current version runs 130 /* The code here works, but is disabled as the current version runs
140 parallel to X, and relies on the existing backlight demon. */ 131 parallel to X, and relies on the existing backlight demon. */
141#if 0 132#if 0
142 if ( QFile::exists( "/proc/sys/pm/light" ) ) 133 if ( QFile::exists( "/proc/sys/pm/light" ) )
143 { 134 {
144 int fd = ::open( "/proc/sys/pm/light", O_WRONLY ); 135 int fd = ::open( "/proc/sys/pm/light", O_WRONLY );
145 if ( fd >= 0 ) 136 if ( fd >= 0 )
146 { 137 {
147 if ( bright ) 138 if ( bright )
148 ::write( fd, "1\n", 2 ); 139 ::write( fd, "1\n", 2 );
149 else 140 else
150 ::write( fd, "0\n", 2 ); 141 ::write( fd, "0\n", 2 );
151 ::close( fd ); 142 ::close( fd );
152 return true; 143 return true;
153 } 144 }
154 } 145 }
155#endif 146#endif
156 return false; 147 return false;
157} 148}
158 149
159 150
160int Yopy::displayBrightnessResolution() const 151int Yopy::displayBrightnessResolution() const
161{ 152{
162 return 2; 153 return 2;
163} 154}
164 155
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index e8b813e..6ac3157 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -1,326 +1,311 @@
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_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::Core; 56using namespace Opie::Core;
57using namespace Opie::Core::Internal; 57using namespace Opie::Core::Internal;
58 58
59struct z_button z_buttons [] = { 59struct z_button z_buttons [] = {
60 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 60 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
61 "devicebuttons/z_calendar", 61 "devicebuttons/z_calendar",
62 "datebook", "nextView()", 62 "datebook", "nextView()",
63 "today", "raise()" }, 63 "today", "raise()" },
64 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 64 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
65 "devicebuttons/z_contact", 65 "devicebuttons/z_contact",
66 "addressbook", "raise()", 66 "addressbook", "raise()",
67 "addressbook", "beamBusinessCard()" }, 67 "addressbook", "beamBusinessCard()" },
68 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 68 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
69 "devicebuttons/z_home", 69 "devicebuttons/z_home",
70 "QPE/Launcher", "home()", 70 "QPE/Launcher", "home()",
71 "buttonsettings", "raise()" }, 71 "buttonsettings", "raise()" },
72 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 72 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
73 "devicebuttons/z_menu", 73 "devicebuttons/z_menu",
74 "QPE/TaskBar", "toggleMenu()", 74 "QPE/TaskBar", "toggleMenu()",
75 "QPE/TaskBar", "toggleStartMenu()" }, 75 "QPE/TaskBar", "toggleStartMenu()" },
76 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 76 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
77 "devicebuttons/z_mail", 77 "devicebuttons/z_mail",
78 "opiemail", "raise()", 78 "opiemail", "raise()",
79 "opiemail", "newMail()" }, 79 "opiemail", "newMail()" },
80}; 80};
81 81
82struct z_button z_buttons_c700 [] = { 82struct z_button z_buttons_c700 [] = {
83 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 83 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
84 "devicebuttons/z_calendar", 84 "devicebuttons/z_calendar",
85 "datebook", "nextView()", 85 "datebook", "nextView()",
86 "today", "raise()" }, 86 "today", "raise()" },
87 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 87 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
88 "devicebuttons/z_contact", 88 "devicebuttons/z_contact",
89 "addressbook", "raise()", 89 "addressbook", "raise()",
90 "addressbook", "beamBusinessCard()" }, 90 "addressbook", "beamBusinessCard()" },
91 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 91 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
92 "devicebuttons/z_home", 92 "devicebuttons/z_home",
93 "QPE/Launcher", "home()", 93 "QPE/Launcher", "home()",
94 "buttonsettings", "raise()" }, 94 "buttonsettings", "raise()" },
95 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 95 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
96 "devicebuttons/z_menu", 96 "devicebuttons/z_menu",
97 "QPE/TaskBar", "toggleMenu()", 97 "QPE/TaskBar", "toggleMenu()",
98 "QPE/TaskBar", "toggleStartMenu()" }, 98 "QPE/TaskBar", "toggleStartMenu()" },
99 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 99 { Qt::Key_F14, QT_TRANSLATE_NOOP("Button", "Display Rotate"),
100 "devicebuttons/z_hinge", 100 "devicebuttons/z_hinge",
101 "QPE/Rotation", "rotateDefault()", 101 "QPE/Rotation", "rotateDefault()",
102 "QPE/Dummy", "doNothing()" }, 102 "QPE/Dummy", "doNothing()" },
103}; 103};
104 104
105// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 105// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
106// class up into individual classes. We need three classes 106// class up into individual classes. We need three classes
107// 107//
108// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 108// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
109// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 109// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
110// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) 110// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860)
111// 111//
112// Only question right now is: Do we really need to do it? Because as soon 112// Only question right now is: Do we really need to do it? Because as soon
113// as the OpenZaurus kernel is ready, there will be a unified interface for all 113// as the OpenZaurus kernel is ready, there will be a unified interface for all
114// Zaurus models (concerning apm, backlight, buttons, etc.) 114// Zaurus models (concerning apm, backlight, buttons, etc.)
115// 115//
116// Comments? - mickeyl. 116// Comments? - mickeyl.
117 117
118void Zaurus::init(const QString&) 118void Zaurus::init(const QString& cpu_info)
119{ 119{
120 d->m_vendorstr = "Sharp"; 120 // generic distribution code already scanned /etc/issue at that point -
121 d->m_vendor = Vendor_Sharp; 121 // embedix releases contain "Embedix <version> | Linux for Embedded Devices"
122 m_embedix = true; // Not openzaurus means: It has an embedix kernel ! 122 if ( d->m_sysverstr.contains( "embedix", false ) )
123 123 {
124 // QFile f ( "/proc/filesystems" ); 124 d->m_vendorstr = "Sharp";
125 QString model; 125 d->m_vendor = Vendor_Sharp;
126 126 d->m_systemstr = "Zaurus";
127 // It isn't a good idea to check the system configuration to 127 d->m_system = System_Zaurus;
128 // detect the distribution ! 128 m_embedix = true;
129 // Otherwise it may happen that any other distribution is detected as openzaurus, just 129 }
130 // because it uses a jffs2 filesystem.. 130 else
131 // (eilers) 131 {
132 // if ( f. open ( IO_ReadOnly ) && ( QTextStream ( &f ). read(). find ( "\tjffs2\n" ) >= 0 )) {
133 QFile f ("/etc/oz_version");
134 if ( f.exists() ){
135 d->m_vendorstr = "OpenZaurus Team"; 132 d->m_vendorstr = "OpenZaurus Team";
136 d->m_systemstr = "OpenZaurus"; 133 d->m_systemstr = "OpenZaurus";
137 d->m_system = System_OpenZaurus; 134 d->m_system = System_OpenZaurus;
135 // sysver already gathered
138 136
139 if ( f. open ( IO_ReadOnly )) { 137 // Openzaurus sometimes uses the embedix kernel, check if this is one
140 QTextStream ts ( &f );
141 d->m_sysverstr = ts. readLine();//. mid ( 10 );
142 f. close();
143 }
144
145 // Openzaurus sometimes uses the embedix kernel!
146 // => Check whether this is an embedix kernel
147 FILE *uname = popen("uname -r", "r"); 138 FILE *uname = popen("uname -r", "r");
139 QFile f;
148 QString line; 140 QString line;
149 if ( f.open(IO_ReadOnly, uname) ) { 141 if ( f.open(IO_ReadOnly, uname) ) {
150 QTextStream ts ( &f ); 142 QTextStream ts ( &f );
151 line = ts. readLine(); 143 line = ts. readLine();
152 int loc = line. find ( "embedix" ); 144 int loc = line. find ( "embedix" );
153 if ( loc != -1 ) 145 if ( loc != -1 )
154 m_embedix = true; 146 m_embedix = true;
155 else 147 else
156 m_embedix = false; 148 m_embedix = false;
157 f. close(); 149 f.close();
158 } 150 }
159 pclose(uname); 151 pclose(uname);
160 } 152 }
161 else {
162 d->m_systemstr = "Zaurus";
163 d->m_system = System_Zaurus;
164 }
165 153
166 f. setName ( "/proc/cpuinfo" ); 154 // check the Zaurus model
167 if ( f. open ( IO_ReadOnly ) ) { 155 QString model;
168 QTextStream ts ( &f ); 156 int loc = cpu_info.find( ":" );
169 QString line; 157 if ( loc != -1 )
170 while( line = ts. readLine() ) { 158 model = cpu_info.mid( loc+2 ).simplifyWhiteSpace();
171 if ( line. left ( 8 ) == "Hardware" ) 159 else
172 break; 160 model = cpu_info;
173 }
174 int loc = line. find ( ":" );
175 if ( loc != -1 )
176 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
177 }
178 161
179 if ( model == "SHARP Corgi" ) { 162 if ( model == "SHARP Corgi" ) {
180 d->m_model = Model_Zaurus_SLC7x0; 163 d->m_model = Model_Zaurus_SLC7x0;
181 d->m_modelstr = "Zaurus SL-C700"; 164 d->m_modelstr = "Zaurus SL-C700";
182 } else if ( model == "SHARP Shepherd" ) { 165 } else if ( model == "SHARP Shepherd" ) {
183 d->m_model = Model_Zaurus_SLC7x0; 166 d->m_model = Model_Zaurus_SLC7x0;
184 d->m_modelstr = "Zaurus SL-C750"; 167 d->m_modelstr = "Zaurus SL-C750";
185 } else if ( model == "SHARP Husky" ) { 168 } else if ( model == "SHARP Husky" ) {
186 d->m_model = Model_Zaurus_SLC7x0; 169 d->m_model = Model_Zaurus_SLC7x0;
187 d->m_modelstr = "Zaurus SL-C760"; 170 d->m_modelstr = "Zaurus SL-C760";
188 } else if ( model == "SHARP Poodle" ) { 171 } else if ( model == "SHARP Poodle" ) {
189 d->m_model = Model_Zaurus_SLB600; 172 d->m_model = Model_Zaurus_SLB600;
190 d->m_modelstr = "Zaurus SL-B500 or SL-5600"; 173 d->m_modelstr = "Zaurus SL-B500 or SL-5600";
191 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 174 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
192 d->m_model = Model_Zaurus_SL5500; 175 d->m_model = Model_Zaurus_SL5500;
193 d->m_modelstr = "Zaurus SL-5500 or SL-5000d"; 176 d->m_modelstr = "Zaurus SL-5500 or SL-5000d";
194 } else { 177 } else {
195 d->m_model = Model_Zaurus_SL5500; 178 d->m_model = Model_Zaurus_SL5500;
196 d->m_modelstr = "Zaurus (Model unknown)"; 179 d->m_modelstr = "Unkown Zaurus";
197 } 180 }
198 181
182 // set initial rotation
183
199 bool flipstate = false; 184 bool flipstate = false;
200 switch ( d->m_model ) { 185 switch ( d->m_model ) {
201 case Model_Zaurus_SLA300: 186 case Model_Zaurus_SLA300:
202 d->m_rotation = Rot0; 187 d->m_rotation = Rot0;
203 break; 188 break;
204 case Model_Zaurus_SLC7x0: 189 case Model_Zaurus_SLC7x0:
205 d->m_rotation = rotation(); 190 d->m_rotation = rotation();
206 d->m_direction = direction(); 191 d->m_direction = direction();
207 break; 192 break;
208 case Model_Zaurus_SLB600: 193 case Model_Zaurus_SLB600:
209 case Model_Zaurus_SL5500: 194 case Model_Zaurus_SL5500:
210 case Model_Zaurus_SL5000: 195 case Model_Zaurus_SL5000:
211 default: 196 default:
212 d->m_rotation = Rot270; 197 d->m_rotation = Rot270;
213 break; 198 break;
214 } 199 }
215 m_leds [0] = Led_Off; 200 m_leds [0] = Led_Off;
216} 201}
217 202
218void Zaurus::initButtons() 203void Zaurus::initButtons()
219{ 204{
220 if ( d->m_buttons ) 205 if ( d->m_buttons )
221 return; 206 return;
222 207
223 d->m_buttons = new QValueList <ODeviceButton>; 208 d->m_buttons = new QValueList <ODeviceButton>;
224 209
225 struct z_button * pz_buttons; 210 struct z_button * pz_buttons;
226 int buttoncount; 211 int buttoncount;
227 switch ( d->m_model ) { 212 switch ( d->m_model ) {
228 case Model_Zaurus_SLC7x0: 213 case Model_Zaurus_SLC7x0:
229 pz_buttons = z_buttons_c700; 214 pz_buttons = z_buttons_c700;
230 buttoncount = ARRAY_SIZE(z_buttons_c700); 215 buttoncount = ARRAY_SIZE(z_buttons_c700);
231 break; 216 break;
232 default: 217 default:
233 pz_buttons = z_buttons; 218 pz_buttons = z_buttons;
234 buttoncount = ARRAY_SIZE(z_buttons); 219 buttoncount = ARRAY_SIZE(z_buttons);
235 break; 220 break;
236 } 221 }
237 222
238 for ( int i = 0; i < buttoncount; i++ ) { 223 for ( int i = 0; i < buttoncount; i++ ) {
239 struct z_button *zb = pz_buttons + i; 224 struct z_button *zb = pz_buttons + i;
240 ODeviceButton b; 225 ODeviceButton b;
241 226
242 b. setKeycode ( zb->code ); 227 b. setKeycode ( zb->code );
243 b. setUserText ( QObject::tr ( "Button", zb->utext )); 228 b. setUserText ( QObject::tr ( "Button", zb->utext ));
244 b. setPixmap ( Resource::loadPixmap ( zb->pix )); 229 b. setPixmap ( Resource::loadPixmap ( zb->pix ));
245 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb->fpressedservice ), 230 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb->fpressedservice ),
246 zb->fpressedaction )); 231 zb->fpressedaction ));
247 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb->fheldservice ), 232 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb->fheldservice ),
248 zb->fheldaction )); 233 zb->fheldaction ));
249 234
250 d->m_buttons->append ( b ); 235 d->m_buttons->append ( b );
251 } 236 }
252 237
253 reloadButtonMapping(); 238 reloadButtonMapping();
254 239
255 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 240 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
256 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), 241 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)),
257 this, SLOT( systemMessage(const QCString&,const QByteArray&))); 242 this, SLOT( systemMessage(const QCString&,const QByteArray&)));
258} 243}
259 244
260#include <unistd.h> 245#include <unistd.h>
261#include <fcntl.h> 246#include <fcntl.h>
262#include <sys/ioctl.h> 247#include <sys/ioctl.h>
263 248
264//#include <asm/sharp_char.h> // including kernel headers is evil ... 249//#include <asm/sharp_char.h> // including kernel headers is evil ...
265 250
266#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 251#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
267 252
268 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 253 #defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
269#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 254#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
270 255
271#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 256#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
272#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 257#define SHARP_BUZ_KEYSOUND 2 /* key sound */
273#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 258#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
274 259
275/* --- for SHARP_BUZZER device --- */ 260/* --- for SHARP_BUZZER device --- */
276 261
277 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 262 //#defineSHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
278//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 263//#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
279 264
280#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 265#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
281#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 266#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
282#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 267#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
283#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 268#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
284#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 269#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
285 270
286//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 271//#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
287//#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 272//#define SHARP_BUZ_KEYSOUND 2 /* key sound */
288 273
289//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */ 274//#define SHARP_PDA_ILLCLICKSOUND 3 /* illegal click */
290//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */ 275//#define SHARP_PDA_WARNSOUND 4 /* warning occurred */
291//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */ 276//#define SHARP_PDA_ERRORSOUND 5 /* error occurred */
292//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */ 277//#define SHARP_PDA_CRITICALSOUND 6 /* critical error occurred */
293//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */ 278//#define SHARP_PDA_SYSSTARTSOUND 7 /* system start */
294//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */ 279//#define SHARP_PDA_SYSTEMENDSOUND 8 /* system shutdown */
295//#define SHARP_PDA_APPSTART 9 /* application start */ 280//#define SHARP_PDA_APPSTART 9 /* application start */
296//#define SHARP_PDA_APPQUIT 10 /* application ends */ 281//#define SHARP_PDA_APPQUIT 10 /* application ends */
297 282
298//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 283//#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
299//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */ 284//#define SHARP_BUZ_DAILY_ALARM 12 /* daily alarm */
300//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */ 285//#define SHARP_BUZ_GOT_PHONE_CALL 13 /* phone call sound */
301//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */ 286//#define SHARP_BUZ_GOT_MAIL 14 /* mail sound */
302// 287//
303 288
304 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 289 #defineSHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
305#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 290#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
306 291
307#define SHARP_IOCTL_GET_ROTATION 0x413c 292#define SHARP_IOCTL_GET_ROTATION 0x413c
308 293
309typedef struct sharp_led_status { 294typedef struct sharp_led_status {
310int which; /* select which LED status is wanted. */ 295int which; /* select which LED status is wanted. */
311int status; /* set new led status if you call SHARP_LED_SETSTATUS */ 296int status; /* set new led status if you call SHARP_LED_SETSTATUS */
312} sharp_led_status; 297} sharp_led_status;
313 298
314#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 299#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
315 300
316#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 301#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
317#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 302#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
318#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 303#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
319 304
320// #include <asm/sharp_apm.h> // including kernel headers is evil ... 305// #include <asm/sharp_apm.h> // including kernel headers is evil ...
321 306
322#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 307#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
323#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 308#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
324#define APM_EVT_POWER_BUTTON (1 << 0) 309#define APM_EVT_POWER_BUTTON (1 << 0)
325 310
326#define FL_IOCTL_STEP_CONTRAST 100 311#define FL_IOCTL_STEP_CONTRAST 100