summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libopie2/opiecore/device/odevice.cpp b/libopie2/opiecore/device/odevice.cpp
index 129215b..280b0c5 100644
--- a/libopie2/opiecore/device/odevice.cpp
+++ b/libopie2/opiecore/device/odevice.cpp
@@ -66,257 +66,257 @@ namespace Core {
66static const char* PATH_PROC_CPUINFO = "/proc/cpuinfo"; 66static const char* PATH_PROC_CPUINFO = "/proc/cpuinfo";
67 67
68 68
69/* STATIC and common implementation */ 69/* STATIC and common implementation */
70/* EXPORT */ ODistribution distributions[] = { 70/* EXPORT */ ODistribution distributions[] = {
71 { System_Familiar, "FamiliarLinux", "/etc/familiar-version" }, 71 { System_Familiar, "FamiliarLinux", "/etc/familiar-version" },
72 { System_OpenZaurus, "OpenZaurus", "/etc/oz_version" }, 72 { System_OpenZaurus, "OpenZaurus", "/etc/oz_version" },
73 { System_OpenEmbedded, "OpenEmbedded", "/etc/oe-version" }, 73 { System_OpenEmbedded, "OpenEmbedded", "/etc/oe-version" },
74 { System_Unknown, "Linux", "/etc/issue" }, 74 { System_Unknown, "Linux", "/etc/issue" },
75}; 75};
76 76
77 77
78/* EXPORT */ bool isQWS(){ 78/* EXPORT */ bool isQWS(){
79 return qApp ? ( qApp->type() == QApplication::GuiServer ) : false; 79 return qApp ? ( qApp->type() == QApplication::GuiServer ) : false;
80} 80}
81 81
82/* EXPORT */ QCString makeChannel ( const char *str ){ 82/* EXPORT */ QCString makeChannel ( const char *str ){
83 if ( str && !::strchr ( str, '/' )) 83 if ( str && !::strchr ( str, '/' ))
84 return QCString ( "QPE/Application/" ) + str; 84 return QCString ( "QPE/Application/" ) + str;
85 else 85 else
86 return str; 86 return str;
87} 87}
88 88
89 89
90 90
91/* Now the default implementation of ODevice */ 91/* Now the default implementation of ODevice */
92 92
93struct default_button default_buttons [] = { 93struct default_button default_buttons [] = {
94 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 94 { Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
95 "devicebuttons/z_calendar", 95 "devicebuttons/z_calendar",
96 "datebook", "nextView()", 96 "datebook", "nextView()",
97 "today", "raise()" }, 97 "today", "raise()" },
98 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 98 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
99 "devicebuttons/z_contact", 99 "devicebuttons/z_contact",
100 "addressbook", "raise()", 100 "addressbook", "raise()",
101 "addressbook", "beamBusinessCard()" }, 101 "addressbook", "beamBusinessCard()" },
102 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 102 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
103 "devicebuttons/z_home", 103 "devicebuttons/z_home",
104 "QPE/Launcher", "home()", 104 "QPE/Launcher", "home()",
105 "buttonsettings", "raise()" }, 105 "buttonsettings", "raise()" },
106 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 106 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
107 "devicebuttons/z_menu", 107 "devicebuttons/z_menu",
108 "QPE/TaskBar", "toggleMenu()", 108 "QPE/TaskBar", "toggleMenu()",
109 "QPE/TaskBar", "toggleStartMenu()" }, 109 "QPE/TaskBar", "toggleStartMenu()" },
110 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 110 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
111 "devicebuttons/z_mail", 111 "devicebuttons/z_mail",
112 "opiemail", "raise()", 112 "opiemail", "raise()",
113 "opiemail", "newMail()" }, 113 "opiemail", "newMail()" },
114}; 114};
115 115
116ODevice *ODevice::inst() 116ODevice *ODevice::inst()
117{ 117{
118 static ODevice *dev = 0; 118 static ODevice *dev = 0;
119 119
120 // rewrite this to only use /proc/cpuinfo or so 120 // rewrite this to only use /proc/cpuinfo or so
121 QString cpu_info; 121 QString cpu_info;
122 122
123 if ( !dev ) 123 if ( !dev )
124 { 124 {
125 QFile f( PATH_PROC_CPUINFO ); 125 QFile f( PATH_PROC_CPUINFO );
126 if ( f.open( IO_ReadOnly ) ) 126 if ( f.open( IO_ReadOnly ) )
127 { 127 {
128 QTextStream s( &f ); 128 QTextStream s( &f );
129 while ( !s.atEnd() ) 129 while ( !s.atEnd() )
130 { 130 {
131 QString line; 131 QString line;
132 line = s.readLine(); 132 line = s.readLine();
133 if ( line.startsWith( "Hardware" ) ) 133 if ( line.startsWith( "Hardware" ) )
134 { 134 {
135 qDebug( "ODevice() - found '%s'", (const char*) line ); 135 qDebug( "ODevice() - found '%s'", (const char*) line );
136 cpu_info = line; 136 cpu_info = line;
137 if ( line.contains( "sharp", false ) ) dev = new Internal::Zaurus(); 137 if ( line.contains( "sharp", false ) ) dev = new Internal::Zaurus();
138 else if ( line.contains( "ipaq", false ) ) dev = new Internal::iPAQ(); 138 else if ( line.contains( "ipaq", false ) ) dev = new Internal::iPAQ();
139 else if ( line.contains( "simpad", false ) ) dev = new Internal::SIMpad(); 139 else if ( line.contains( "simpad", false ) ) dev = new Internal::SIMpad();
140 else if ( line.contains( "jornada", false ) ) dev = new Internal::Jornada(); 140 else if ( line.contains( "jornada", false ) ) dev = new Internal::Jornada();
141 else if ( line.contains( "ramses", false ) ) dev = new Internal::Ramses(); 141 else if ( line.contains( "ramses", false ) ) dev = new Internal::Ramses();
142 else qWarning( "ODevice() - unknown hardware - using default." ); 142 else qWarning( "ODevice() - unknown hardware - using default." );
143 break; 143 break;
144 } 144 }
145 } 145 }
146 } 146 }
147 else 147 else
148 { 148 {
149 qWarning( "ODevice() - can't open '%s' - unknown hardware - using default.", PATH_PROC_CPUINFO ); 149 qWarning( "ODevice() - can't open '%s' - unknown hardware - using default.", PATH_PROC_CPUINFO );
150 } 150 }
151 if ( !dev ) dev = new ODevice(); 151 if ( !dev ) dev = new ODevice();
152 dev->init(cpu_info); 152 dev->init(cpu_info);
153 } 153 }
154 return dev; 154 return dev;
155} 155}
156 156
157ODevice::ODevice() 157ODevice::ODevice()
158{ 158{
159 d = new ODeviceData; 159 d = new ODeviceData;
160 160
161 d->m_modelstr = "Unknown"; 161 d->m_modelstr = "Unknown";
162 d->m_model = Model_Unknown; 162 d->m_model = Model_Unknown;
163 d->m_vendorstr = "Unknown"; 163 d->m_vendorstr = "Unknown";
164 d->m_vendor = Vendor_Unknown; 164 d->m_vendor = Vendor_Unknown;
165 d->m_systemstr = "Unknown"; 165 d->m_systemstr = "Unknown";
166 d->m_system = System_Unknown; 166 d->m_system = System_Unknown;
167 d->m_sysverstr = "0.0"; 167 d->m_sysverstr = "0.0";
168 d->m_rotation = Rot0; 168 d->m_rotation = Rot0;
169 d->m_direction = CW; 169 d->m_direction = CW;
170 170
171 d->m_holdtime = 1000; // 1000ms 171 d->m_holdtime = 1000; // 1000ms
172 d->m_buttons = 0; 172 d->m_buttons = 0;
173 d->m_cpu_frequencies = new QStrList; 173 d->m_cpu_frequencies = new QStrList;
174 174
175 175
176 /* mixer */ 176 /* mixer */
177 d->m_sound = d->m_vol = d->m_mixer = -1; 177 d->m_sound = d->m_vol = d->m_mixer = -1;
178 178
179 // New distribution detection code first checks for legacy distributions, 179 // New distribution detection code first checks for legacy distributions,
180 // identified by /etc/familiar-version or /etc/oz_version. 180 // identified by /etc/familiar-version or /etc/oz_version.
181 // Then check for OpenEmbedded and lastly, read /etc/issue 181 // Then check for OpenEmbedded and lastly, read /etc/issue
182 182
183 for ( unsigned int i = 0; i < sizeof distributions; ++i ) 183 for ( unsigned int i = 0; i < sizeof distributions; ++i )
184 { 184 {
185 if ( QFile::exists( distributions[i].sysvfile ) ) 185 if ( QFile::exists( distributions[i].sysvfile ) )
186 { 186 {
187 d->m_systemstr = distributions[i].sysstr; 187 d->m_systemstr = distributions[i].sysstr;
188 d->m_system = distributions[i].system; 188 d->m_system = distributions[i].system;
189 d->m_sysverstr = "<Unknown>"; 189 d->m_sysverstr = "<Unknown>";
190 QFile f( distributions[i].sysvfile ); 190 QFile f( distributions[i].sysvfile );
191 if ( f.open( IO_ReadOnly ) ) 191 if ( f.open( IO_ReadOnly ) )
192 { 192 {
193 QTextStream ts( &f ); 193 QTextStream ts( &f );
194 d->m_sysverstr = ts.readLine(); 194 d->m_sysverstr = ts.readLine().replace( QRegExp( "\\\\." ), "" );
195 } 195 }
196 break; 196 break;
197 } 197 }
198 } 198 }
199} 199}
200 200
201void ODevice::systemMessage( const QCString &msg, const QByteArray & ) 201void ODevice::systemMessage( const QCString &msg, const QByteArray & )
202{ 202{
203 if ( msg == "deviceButtonMappingChanged()" ) { 203 if ( msg == "deviceButtonMappingChanged()" ) {
204 reloadButtonMapping(); 204 reloadButtonMapping();
205 } 205 }
206} 206}
207 207
208void ODevice::init(const QString&) 208void ODevice::init(const QString&)
209{ 209{
210} 210}
211 211
212/** 212/**
213* This method initialises the button mapping 213* This method initialises the button mapping
214*/ 214*/
215void ODevice::initButtons() 215void ODevice::initButtons()
216{ 216{
217 if ( d->m_buttons ) 217 if ( d->m_buttons )
218 return; 218 return;
219 219
220 qDebug ( "init Buttons" ); 220 qDebug ( "init Buttons" );
221 d->m_buttons = new QValueList <ODeviceButton>; 221 d->m_buttons = new QValueList <ODeviceButton>;
222 for ( uint i = 0; i < ( sizeof( default_buttons ) / sizeof( default_button )); i++ ) { 222 for ( uint i = 0; i < ( sizeof( default_buttons ) / sizeof( default_button )); i++ ) {
223 default_button *db = default_buttons + i; 223 default_button *db = default_buttons + i;
224 ODeviceButton b; 224 ODeviceButton b;
225 b. setKeycode ( db->code ); 225 b. setKeycode ( db->code );
226 b. setUserText ( QObject::tr ( "Button", db->utext )); 226 b. setUserText ( QObject::tr ( "Button", db->utext ));
227 b. setPixmap ( Resource::loadPixmap ( db->pix )); 227 b. setPixmap ( Resource::loadPixmap ( db->pix ));
228 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( db->fpressedservice ), db->fpressedaction )); 228 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( db->fpressedservice ), db->fpressedaction ));
229 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( db->fheldservice ), db->fheldaction )); 229 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( db->fheldservice ), db->fheldaction ));
230 d->m_buttons->append ( b ); 230 d->m_buttons->append ( b );
231 } 231 }
232 232
233 reloadButtonMapping(); 233 reloadButtonMapping();
234 234
235 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 235 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
236 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&))); 236 connect ( sysch, SIGNAL( received(const QCString&,const QByteArray&)), this, SLOT( systemMessage(const QCString&,const QByteArray&)));
237} 237}
238 238
239ODevice::~ODevice() 239ODevice::~ODevice()
240{ 240{
241// we leak m_devicebuttons and m_cpu_frequency 241// we leak m_devicebuttons and m_cpu_frequency
242// but it's a singleton and it is not so importantant 242// but it's a singleton and it is not so importantant
243// -zecke 243// -zecke
244 delete d; 244 delete d;
245} 245}
246 246
247bool ODevice::setSoftSuspend ( bool /*soft*/ ) 247bool ODevice::setSoftSuspend ( bool /*soft*/ )
248{ 248{
249 return false; 249 return false;
250} 250}
251 251
252//#include <linux/apm_bios.h> 252//#include <linux/apm_bios.h>
253 253
254#define APM_IOC_SUSPEND OD_IO( 'A', 2 ) 254#define APM_IOC_SUSPEND OD_IO( 'A', 2 )
255 255
256/** 256/**
257* This method will try to suspend the device 257* This method will try to suspend the device
258* It only works if the user is the QWS Server and the apm application 258* It only works if the user is the QWS Server and the apm application
259* is installed. 259* is installed.
260* It tries to suspend and then waits some time cause some distributions 260* It tries to suspend and then waits some time cause some distributions
261* do have asynchronus apm implementations. 261* do have asynchronus apm implementations.
262* This method will either fail and return false or it'll suspend the 262* This method will either fail and return false or it'll suspend the
263* device and return once the device got woken up 263* device and return once the device got woken up
264* 264*
265* @return if the device got suspended 265* @return if the device got suspended
266*/ 266*/
267bool ODevice::suspend() 267bool ODevice::suspend()
268{ 268{
269 qDebug("ODevice::suspend"); 269 qDebug("ODevice::suspend");
270 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 270 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
271 return false; 271 return false;
272 272
273 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 273 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
274 return false; 274 return false;
275 275
276 bool res = false; 276 bool res = false;
277 ODevice::sendSuspendmsg(); 277 ODevice::sendSuspendmsg();
278 278
279 struct timeval tvs, tvn; 279 struct timeval tvs, tvn;
280 ::gettimeofday ( &tvs, 0 ); 280 ::gettimeofday ( &tvs, 0 );
281 281
282 ::sync(); // flush fs caches 282 ::sync(); // flush fs caches
283 res = ( ::system ( "apm --suspend" ) == 0 ); 283 res = ( ::system ( "apm --suspend" ) == 0 );
284 284
285 // This is needed because the iPAQ apm implementation is asynchronous and we 285 // This is needed because the iPAQ apm implementation is asynchronous and we
286 // can not be sure when exactly the device is really suspended 286 // can not be sure when exactly the device is really suspended
287 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 287 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
288 288
289 if ( res ) { 289 if ( res ) {
290 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 290 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
291 ::usleep ( 200 * 1000 ); 291 ::usleep ( 200 * 1000 );
292 ::gettimeofday ( &tvn, 0 ); 292 ::gettimeofday ( &tvn, 0 );
293 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 293 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
294 } 294 }
295 295
296 return res; 296 return res;
297} 297}
298 298
299//#include <linux/fb.h> better not rely on kernel headers in userspace ... 299//#include <linux/fb.h> better not rely on kernel headers in userspace ...
300 300
301#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 301#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
302 302
303/* VESA Blanking Levels */ 303/* VESA Blanking Levels */
304#define VESA_NO_BLANKING 0 304#define VESA_NO_BLANKING 0
305#define VESA_VSYNC_SUSPEND 1 305#define VESA_VSYNC_SUSPEND 1
306#define VESA_HSYNC_SUSPEND 2 306#define VESA_HSYNC_SUSPEND 2
307#define VESA_POWERDOWN 3 307#define VESA_POWERDOWN 3
308 308
309/** 309/**
310* This sets the display on or off 310* This sets the display on or off
311*/ 311*/
312bool ODevice::setDisplayStatus ( bool on ) 312bool ODevice::setDisplayStatus ( bool on )
313{ 313{
314 qDebug("ODevice::setDisplayStatus(%d)", on); 314 qDebug("ODevice::setDisplayStatus(%d)", on);
315 315
316 if ( d->m_model == Model_Unknown ) 316 if ( d->m_model == Model_Unknown )
317 return false; 317 return false;
318 318
319 bool res = false; 319 bool res = false;
320 int fd; 320 int fd;
321 321
322 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 322 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {