From 9fc7d401f1445c5f3d3d74e173dea6de2ea4784a Mon Sep 17 00:00:00 2001 From: mickeyl Date: Thu, 08 Jan 2004 23:22:51 +0000 Subject: 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? --- (limited to 'core/applets/rotateapplet') 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 @@ -38,12 +38,13 @@ #include #include #include +using namespace Opie; /* QT */ #include #include -using namespace Opie; +#include RotateApplet::RotateApplet() :QObject( 0, "RotateApplet" ), ref( 0 ), m_flipped( false ) @@ -69,21 +70,37 @@ void RotateApplet::channelReceived( const QCString &msg, const QByteArray & data 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 ); + + Config cfg( "apm" ); + cfg.setGroup( PowerStatusManager::readStatus().acStatus() == PowerStatus::Online ? "AC" : "Battery" ); + int action = cfg.readNumEntry( "CloseHingeAction", 0 ); + if ( status == CASE_CLOSED ) { - Config cfg( "apm" ); - cfg.setGroup( PowerStatusManager::readStatus().acStatus() == PowerStatus::Online ? "AC" : "Battery" ); - int action = cfg.readNumEntry( "CloseHingeAction", 0 ); 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 ); 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 @@ -57,8 +57,8 @@ public: virtual QString tr( const char*, const char* ) const; */ virtual QPopupMenu *popup ( QWidget *parent ) const; - virtual void activated ( ); - virtual void rotateDefault ( ); + virtual void activated ( ); + virtual void rotateDefault ( ); private slots: void channelReceived( const QCString &msg, const QByteArray & data ); -- cgit v0.9.0.2