author | mickeyl <mickeyl> | 2004-01-08 23:22:51 (UTC) |
---|---|---|
committer | mickeyl <mickeyl> | 2004-01-08 23:22:51 (UTC) |
commit | 9fc7d401f1445c5f3d3d74e173dea6de2ea4784a (patch) (side-by-side diff) | |
tree | 2c5576c866e8e90a8e5e5efe53e1a5955156b6a5 | |
parent | b52dbdb9e992bd891d69601a6425086099e2ea04 (diff) | |
download | opie-9fc7d401f1445c5f3d3d74e173dea6de2ea4784a.zip opie-9fc7d401f1445c5f3d3d74e173dea6de2ea4784a.tar.gz opie-9fc7d401f1445c5f3d3d74e173dea6de2ea4784a.tar.bz2 |
turn on the light after opening the hinge when 'display off' is configured as hinge action
NOTE: I think there's a bug in the Embedix kernel which either tells a wrong hinge value after suspend
or sends out a double (bogus) keycode event on closing the hinge.
How to reproduce:
1.) Configure "suspend" as closeHingeAction
2.) Close Display --> Device Suspends
3.) Open Display --> Device does nothing (needs a kernel patch to wake up automatically, but that's another story)
4.) Wakeup Device --> Device sends F14 to rotateApplet, rotateApplet reads hinge code... it's CLOSED(!) - which is wrong
5.) Device resuspends.
6.) Wakeup again --> Device sends F14 (huh, again?) to rotateApplet. rotateApplet reads hinge code... it's OPEN now - which is ok.
Ideas?
-rw-r--r-- | core/applets/rotateapplet/rotate.cpp | 25 | ||||
-rw-r--r-- | core/applets/rotateapplet/rotate.h | 0 |
2 files changed, 21 insertions, 4 deletions
diff --git a/core/applets/rotateapplet/rotate.cpp b/core/applets/rotateapplet/rotate.cpp index 79098d4..d8081a6 100644 --- a/core/applets/rotateapplet/rotate.cpp +++ b/core/applets/rotateapplet/rotate.cpp @@ -33,22 +33,23 @@ /* OPIE */ #include <opie/odevice.h> #include <qpe/applnk.h> #include <qpe/config.h> #include <qpe/power.h> #include <qpe/qpeapplication.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/resource.h> +using namespace Opie; /* QT */ #include <qiconset.h> #include <qpopupmenu.h> -using namespace Opie; +#include <time.h> RotateApplet::RotateApplet() :QObject( 0, "RotateApplet" ), ref( 0 ), m_flipped( false ) { #if !defined(QT_NO_COP) QCopChannel *rotateChannel = new QCopChannel( "QPE/Rotation" , this ); connect ( rotateChannel, SIGNAL( received( const QCString &, const QByteArray &) ), @@ -64,31 +65,47 @@ RotateApplet::~RotateApplet ( ) * Qcop receive method. */ void RotateApplet::channelReceived( const QCString &msg, const QByteArray & data ) { qDebug( "RotateApplet::channelReceived( '%s' )", (const char*) msg ); if ( ODevice::inst()->hasHingeSensor() ) { + struct timespec interval; + struct timespec remain; + interval.tv_sec = 0; + interval.tv_nsec = 600; + ::nanosleep( &interval, &remain ); OHingeStatus status = ODevice::inst()->readHingeSensor(); qDebug( "RotateApplet::readHingeSensor = %d", (int) status ); - if ( status == CASE_CLOSED ) - { + Config cfg( "apm" ); cfg.setGroup( PowerStatusManager::readStatus().acStatus() == PowerStatus::Online ? "AC" : "Battery" ); int action = cfg.readNumEntry( "CloseHingeAction", 0 ); + + if ( status == CASE_CLOSED ) + { switch ( action ) { case 1: /* DISPLAY OFF */ ODevice::inst()->setDisplayBrightness( 0 ); break; case 2: /* SUSPEND */ ODevice::inst()->suspend(); break; default: /* IGNORE */ break; } - qDebug( "RotateApplet::switchAction %d performed.", cfg.readNumEntry( "CloseHingeAction", 0 ) ); } + else /* status != CASE_CLOSED */ + { + switch ( action ) + { + case 1: /* DISPLAY OFF */ ODevice::inst()->setDisplayBrightness( 127 ); break; + case 2: /* SUSPEND */ /* How to wake up the device from kernel? */; break; + default: /* IGNORE */ break; + } + } + qDebug( "RotateApplet::switchAction %d performed.", cfg.readNumEntry( "CloseHingeAction", 0 ) ); } QDataStream stream( data, IO_ReadOnly ); if ( msg == "flip()" ) { activated ( ); } else if ( msg == "rotateDefault()") diff --git a/core/applets/rotateapplet/rotate.h b/core/applets/rotateapplet/rotate.h index 572b82a..4403c7d 100644 --- a/core/applets/rotateapplet/rotate.h +++ b/core/applets/rotateapplet/rotate.h |