summaryrefslogtreecommitdiff
path: root/libopie2/opiecore/device
authormickeyl <mickeyl>2005-02-06 22:53:53 (UTC)
committer mickeyl <mickeyl>2005-02-06 22:53:53 (UTC)
commitab32151cd8e85deb354bab04e25efb1f3f399dee (patch) (unidiff)
tree66ab72d210bbc50c0e535986c61ca23f68efbfd1 /libopie2/opiecore/device
parentec33239c6edd9927fe2f82953fa48dec47d19567 (diff)
downloadopie-ab32151cd8e85deb354bab04e25efb1f3f399dee.zip
opie-ab32151cd8e85deb354bab04e25efb1f3f399dee.tar.gz
opie-ab32151cd8e85deb354bab04e25efb1f3f399dee.tar.bz2
make autorotate also work on kernel 2.6
Diffstat (limited to 'libopie2/opiecore/device') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice.cpp88
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp22
2 files changed, 35 insertions, 75 deletions
diff --git a/libopie2/opiecore/device/odevice.cpp b/libopie2/opiecore/device/odevice.cpp
index 3d69614..2c5190c 100644
--- a/libopie2/opiecore/device/odevice.cpp
+++ b/libopie2/opiecore/device/odevice.cpp
@@ -182,13 +182,13 @@ ODevice::ODevice()
182 d->m_buttons = 0; 182 d->m_buttons = 0;
183 d->m_cpu_frequencies = new QStrList; 183 d->m_cpu_frequencies = new QStrList;
184 184
185 185
186 /* mixer */ 186 /* mixer */
187 d->m_sound = d->m_vol = d->m_mixer = -1; 187 d->m_sound = d->m_vol = d->m_mixer = -1;
188 188
189 /* System QCopChannel created */ 189 /* System QCopChannel created */
190 d->m_initializedButtonQcop = false; 190 d->m_initializedButtonQcop = false;
191 191
192 // New distribution detection code first checks for legacy distributions, 192 // New distribution detection code first checks for legacy distributions,
193 // identified by /etc/familiar-version or /etc/oz_version. 193 // identified by /etc/familiar-version or /etc/oz_version.
194 // Then check for OpenEmbedded and lastly, read /etc/issue 194 // Then check for OpenEmbedded and lastly, read /etc/issue
@@ -268,39 +268,13 @@ ODevice::~ODevice()
268* device and return once the device got woken up 268* device and return once the device got woken up
269* 269*
270* @return if the device got suspended 270* @return if the device got suspended
271*/ 271*/
272bool ODevice::suspend() 272bool ODevice::suspend()
273{ 273{
274 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 274 return false; // default implementation == unknown device or qvfb
275 return false;
276
277 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
278 return false;
279
280 bool res = false;
281 ODevice::sendSuspendmsg();
282
283 struct timeval tvs, tvn;
284 ::gettimeofday ( &tvs, 0 );
285
286 ::sync(); // flush fs caches
287 res = ( ::system ( "apm --suspend" ) == 0 );
288
289 // This is needed because the iPAQ apm implementation is asynchronous and we
290 // can not be sure when exactly the device is really suspended
291 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
292
293 if ( res ) {
294 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
295 ::usleep ( 200 * 1000 );
296 ::gettimeofday ( &tvn, 0 );
297 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
298 }
299
300 return res;
301} 275}
302 276
303//#include <linux/fb.h> better not rely on kernel headers in userspace ... 277//#include <linux/fb.h> better not rely on kernel headers in userspace ...
304 278
305#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611 279#define FBIOBLANK OD_IO( 'F', 0x11 ) // 0x4611
306 280
@@ -310,76 +284,63 @@ bool ODevice::suspend()
310#define VESA_HSYNC_SUSPEND 2 284#define VESA_HSYNC_SUSPEND 2
311#define VESA_POWERDOWN 3 285#define VESA_POWERDOWN 3
312 286
313/** 287/**
314* This sets the display on or off 288* This sets the display on or off
315*/ 289*/
316bool ODevice::setDisplayStatus ( bool on ) 290bool ODevice::setDisplayStatus( bool on )
317{ 291{
318 qDebug("ODevice::setDisplayStatus(%d)", on); 292 qDebug( "ODevice::setDisplayStatus( %d ) - please override me.", on );
319 293 return false; // don't do anything for unknown models
320 if ( d->m_model == Model_Unknown )
321 return false;
322
323 bool res = false;
324 int fd;
325
326#ifdef QT_QWS_DEVFS
327 if (( fd = ::open ( "/dev/fb/0", O_RDWR )) >= 0 ) {
328#else
329 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
330#endif
331 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
332 ::close ( fd );
333 }
334 return res;
335} 294}
336 295
337/** 296/**
338* This sets the display brightness 297* This sets the display brightness
339* 298*
340* @param b The brightness to be set on a scale from 0 to 255 299* @param b The brightness to be set on a scale from 0 to 255
341* @return success or failure 300* @return success or failure
342*/ 301*/
343bool ODevice::setDisplayBrightness ( int b) 302bool ODevice::setDisplayBrightness( int b )
344{ 303{
345 Q_UNUSED( b ) 304 qDebug( "ODevice::setDisplayBrightness( %d ) - please override me.", b );
346 return false; 305 return false;
347} 306}
348 307
349/** 308/**
350 * 309 *
351 * @return Returns the number of steppings on the brightness slider 310 * @returns the number of steppings on the brightness slider
352 * in the Light-'n-Power settings. Values smaller zero and bigger 311 * in the Light-'n-Power settings. Values smaller than zero and bigger
353 * than 255 do not make sense. 312 * than 255 do not make sense.
354 * 313 *
355 * \sa QSlider::setLineStep 314 * \sa QSlider::setLineStep
356 * \sa QSlider::setPageStep 315 * \sa QSlider::setPageStep
357 */ 316 */
358int ODevice::displayBrightnessResolution() const 317int ODevice::displayBrightnessResolution() const
359{ 318{
319 qDebug( "ODevice::displayBrightnessResolution() - please override me." );
360 return 16; 320 return 16;
361} 321}
362 322
363/** 323/**
364* This sets the display contrast 324* This sets the display contrast
365* @param p The contrast to be set on a scale from 0 to 255 325* @param p The contrast to be set on a scale from 0 to 255
366* @return success or failure 326* @returns success or failure
367*/ 327*/
368bool ODevice::setDisplayContrast ( int p) 328bool ODevice::setDisplayContrast( int p )
369{ 329{
370 Q_UNUSED( p ) 330 qDebug( "ODevice::setDisplayContrast( %d ) - please override me.", p );
371 return false; 331 return false;
372} 332}
373 333
374/** 334/**
375* @return return the max value for the brightness settings slider 335* @returns the maximum value for the contrast settings slider
376* or 0 if the device doesn't support setting of a contrast 336* or 0 if the device doesn't support setting of a contrast
377*/ 337*/
378int ODevice::displayContrastResolution() const 338int ODevice::displayContrastResolution() const
379{ 339{
340 qDebug( "ODevice::displayBrightnessResolution() - please override me." );
380 return 0; 341 return 0;
381} 342}
382 343
383/** 344/**
384* This returns the vendor as string 345* This returns the vendor as string
385* @return Vendor as QString 346* @return Vendor as QString
@@ -636,23 +597,23 @@ uint ODevice::buttonHoldTime() const
636*/ 597*/
637const ODeviceButton *ODevice::buttonForKeycode ( ushort code ) 598const ODeviceButton *ODevice::buttonForKeycode ( ushort code )
638{ 599{
639 initButtons(); 600 initButtons();
640 601
641 for ( QValueListConstIterator<ODeviceButton> it = d->m_buttons->begin(); it != d->m_buttons->end(); ++it ) { 602 for ( QValueListConstIterator<ODeviceButton> it = d->m_buttons->begin(); it != d->m_buttons->end(); ++it ) {
642 if ( (*it). keycode() == code ) 603 if ( (*it).keycode() == code )
643 return &(*it); 604 return &(*it);
644 } 605 }
645 return 0; 606 return 0;
646} 607}
647 608
648void ODevice::reloadButtonMapping() 609void ODevice::reloadButtonMapping()
649{ 610{
650 if(!d->m_buttons) 611 if(!d->m_buttons)
651 initButtons(); 612 initButtons();
652 613
653 if(!d->m_initializedButtonQcop) { 614 if(!d->m_initializedButtonQcop) {
654 QCopChannel *chan = new QCopChannel("QPE/System", this, "ODevice button channel"); 615 QCopChannel *chan = new QCopChannel("QPE/System", this, "ODevice button channel");
655 connect(chan,SIGNAL(received(const QCString&,const QByteArray&)), 616 connect(chan,SIGNAL(received(const QCString&,const QByteArray&)),
656 this,SLOT(systemMessage(const QCString&,const QByteArray&))); 617 this,SLOT(systemMessage(const QCString&,const QByteArray&)));
657 d->m_initializedButtonQcop = true; 618 d->m_initializedButtonQcop = true;
658 } 619 }
@@ -676,13 +637,12 @@ void ODevice::reloadButtonMapping()
676 hch = cfg. readEntry ( "HeldActionChannel" ). latin1(); 637 hch = cfg. readEntry ( "HeldActionChannel" ). latin1();
677 hm = cfg. readEntry ( "HeldActionMessage" ). latin1(); 638 hm = cfg. readEntry ( "HeldActionMessage" ). latin1();
678 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 639 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
679 } 640 }
680 641
681 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 642 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
682
683 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 643 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
684 } 644 }
685} 645}
686 646
687void ODevice::remapPressedAction ( int button, const OQCopMessage &action ) 647void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
688{ 648{
@@ -738,16 +698,16 @@ void ODevice::virtual_hook(int, void* ){
738/** 698/**
739 * \brief Send a QCOP Message before suspending 699 * \brief Send a QCOP Message before suspending
740 * 700 *
741 * Sends a QCOP message to channel QPE/System 701 * Sends a QCOP message to channel QPE/System
742 * with the message "aboutToSuspend()" if this 702 * with the message "aboutToSuspend()" if this
743 * is the windowing server. 703 * is the windowing server.
744 * 704 *
745 * Call this in your custom \sa suspend() Method 705 * Call this in your custom \sa suspend() Method
746 * before going to suspend. 706 * before going to suspend.
747 * 707 *
748 */ 708 */
749void ODevice::sendSuspendmsg() 709void ODevice::sendSuspendmsg()
750{ 710{
751 if ( isQWS() ) 711 if ( isQWS() )
752 return; 712 return;
753 713
@@ -784,13 +744,13 @@ void ODevice::remPreHandler(QWSServer::KeyboardFilter*aFilter)
784 Opie::Core::OKeyFilter::inst()->remPreHandler(aFilter); 744 Opie::Core::OKeyFilter::inst()->remPreHandler(aFilter);
785} 745}
786 746
787 747
788/** 748/**
789 * @internal 749 * @internal
790 * 750 *
791 * @see changeMixerForAlarm 751 * @see changeMixerForAlarm
792 */ 752 */
793void ODevice::playingStopped() { 753void ODevice::playingStopped() {
794 if ( sender() ) 754 if ( sender() )
795 const_cast<QObject*>(sender())->disconnect( this ); 755 const_cast<QObject*>(sender())->disconnect( this );
796 756
@@ -826,19 +786,19 @@ void ODevice::playingStopped() {
826 * if(!snd.isFinished()) 786 * if(!snd.isFinished())
827 * return; 787 * return;
828 * 788 *
829 * changeMixerForAlarm( my_channel, "/dev/mixer", &snd ); 789 * changeMixerForAlarm( my_channel, "/dev/mixer", &snd );
830 * snd.play() 790 * snd.play()
831 * \endcode 791 * \endcode
832 * 792 *
833 * 793 *
834 * 794 *
835 * @param mixer The mixer number/channel to use 795 * @param mixer The mixer number/channel to use
836 * @param file The file name. If you convert from QString use QFile::encodeName 796 * @param file The file name. If you convert from QString use QFile::encodeName
837 * @param snd The sound to wait for finishing 797 * @param snd The sound to wait for finishing
838 * 798 *
839 */ 799 */
840void ODevice::changeMixerForAlarm( int mixer, const char* file, Sound *snd ) { 800void ODevice::changeMixerForAlarm( int mixer, const char* file, Sound *snd ) {
841#ifndef QT_NO_SOUND 801#ifndef QT_NO_SOUND
842 if (( d->m_sound = ::open ( file, O_RDWR )) >= 0 ) { 802 if (( d->m_sound = ::open ( file, O_RDWR )) >= 0 ) {
843 if ( ::ioctl ( d->m_sound, MIXER_READ( mixer ), &d->m_vol ) >= 0 ) { 803 if ( ::ioctl ( d->m_sound, MIXER_READ( mixer ), &d->m_vol ) >= 0 ) {
844 Config cfg ( "qpe" ); 804 Config cfg ( "qpe" );
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index 7377965..82e127e 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -99,24 +99,24 @@ struct z_button z_buttons_c700 [] = {
99 "QPE/TaskBar", "toggleStartMenu()" }, 99 "QPE/TaskBar", "toggleStartMenu()" },
100 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 100 { Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
101 "devicebuttons/z_mail", 101 "devicebuttons/z_mail",
102 "opiemail", "raise()", 102 "opiemail", "raise()",
103 "opiemail", "newMail()" }, 103 "opiemail", "newMail()" },
104 104
105 { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 105 { Qt::Key_F15, QT_TRANSLATE_NOOP("Button", "Hinge1"),
106 "devicebuttons/z_hinge", 106 "devicebuttons/z_hinge1",
107 "QPE/Rotation", "rotateDefault()", 107 "QPE/Rotation", "rotateDefault()",
108 "QPE/Dummy", "doNothing()" }, 108 "QPE/Rotation", "rotateDefault()" },
109 { Qt::Key_F16, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 109 { Qt::Key_F16, QT_TRANSLATE_NOOP("Button", "Hinge2"),
110 "devicebuttons/z_hinge", 110 "devicebuttons/z_hinge2",
111 "QPE/Rotation", "rotateDefault()", 111 "QPE/Rotation", "rotateDefault()",
112 "QPE/Dummy", "doNothing()" }, 112 "QPE/Rotation", "rotateDefault()" },
113 { Qt::Key_F17, QT_TRANSLATE_NOOP("Button", "Display Rotate"), 113 { Qt::Key_F17, QT_TRANSLATE_NOOP("Button", "Hinge3"),
114 "devicebuttons/z_hinge", 114 "devicebuttons/z_hinge3",
115 "QPE/Rotation", "rotateDefault()", 115 "QPE/Rotation", "rotateDefault()",
116 "QPE/Dummy", "doNothing()" }, 116 "QPE/Rotation", "rotateDefault()" },
117}; 117};
118 118
119// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 119// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
120// class up into individual classes. We need three classes 120// class up into individual classes. We need three classes
121// 121//
122// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 122// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
@@ -485,13 +485,13 @@ bool Zaurus::setDisplayStatus( bool on )
485bool Zaurus::suspend() 485bool Zaurus::suspend()
486{ 486{
487 qDebug("ODevice::suspend"); 487 qDebug("ODevice::suspend");
488 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 488 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
489 return false; 489 return false;
490 490
491 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 491 if ( d->m_model == Model_Unknown ) // better don't suspend on unknown devices
492 return false; 492 return false;
493 493
494 bool res = false; 494 bool res = false;
495 ODevice::sendSuspendmsg(); 495 ODevice::sendSuspendmsg();
496 496
497 struct timeval tvs, tvn; 497 struct timeval tvs, tvn;
@@ -531,13 +531,13 @@ Transformation Zaurus::rotation() const
531 if ( hs == CASE_PORTRAIT ) rot = Rot0; 531 if ( hs == CASE_PORTRAIT ) rot = Rot0;
532 else if ( hs == CASE_UNKNOWN ) rot = Rot0; 532 else if ( hs == CASE_UNKNOWN ) rot = Rot0;
533 else rot = Rot270; 533 else rot = Rot270;
534 } 534 }
535 else 535 else
536 { 536 {
537 if ( hs == CASE_PORTRAIT ) rot = Rot270; 537 if ( hs == CASE_PORTRAIT ) rot = Rot90;
538 else if ( hs == CASE_UNKNOWN ) rot = Rot0; 538 else if ( hs == CASE_UNKNOWN ) rot = Rot0;
539 else rot = Rot0; 539 else rot = Rot0;
540 } 540 }
541 } 541 }
542 break; 542 break;
543 case Model_Zaurus_SL6000: 543 case Model_Zaurus_SL6000: