summaryrefslogtreecommitdiff
path: root/libopie/odevice.cpp
Side-by-side diff
Diffstat (limited to 'libopie/odevice.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp40
1 files changed, 39 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 103104f..02f13b5 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -130,25 +130,27 @@ protected:
virtual void buzzer ( int snd );
OLedState m_leds [1];
};
class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
protected:
virtual void init ( );
virtual void initButtons ( );
public:
virtual bool setSoftSuspend ( bool soft );
+ virtual bool suspend();
+ virtual bool setDisplayStatus( bool on );
virtual bool setDisplayBrightness ( int b );
virtual int displayBrightnessResolution ( ) const;
virtual void alarmSound ( );
virtual QValueList <OLed> ledList ( ) const;
virtual QValueList <OLedState> ledStateList ( OLed led ) const;
virtual OLedState ledState ( OLed led ) const;
virtual bool setLedState ( OLed led, OLedState st );
protected:
virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
@@ -1706,33 +1708,69 @@ void SIMpad::alarmSound ( )
while ( !snd. isFinished ( ))
qApp-> processEvents ( );
if ( fd >= 0 ) {
if ( vol_reset )
::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
::close ( fd );
}
#endif
}
+bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm
+{
+ qDebug( "ODevice for SIMpad: suspend()" );
+ if ( !isQWS( ) ) // only qwsserver is allowed to suspend
+ return false;
+
+ bool res = false;
+
+ struct timeval tvs, tvn;
+ ::gettimeofday ( &tvs, 0 );
+
+ ::sync ( ); // flush fs caches
+ res = ( ::system ( "echo > /proc/sys/pm/suspend" ) == 0 ); //TODO make better :)
+
+ return res;
+}
+
+
bool SIMpad::setSoftSuspend ( bool soft )
{
- //TODO
+ qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" );
return false;
}
+bool SIMpad::setDisplayStatus ( bool on )
+{
+ qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" );
+
+ bool res = false;
+ int fd;
+
+ QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :)
+
+ if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
+ res = ( ::system( (const char*) cmdline ) == 0 );
+ ::close ( fd );
+ }
+ return res;
+}
+
+
bool SIMpad::setDisplayBrightness ( int bright )
{
+ qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright );
bool res = false;
int fd;
if ( bright > 255 )
bright = 255;
if ( bright < 0 )
bright = 0;
if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) {
int value = 255 - bright;
const int mask = SIMPAD_BACKLIGHT_MASK;
value = value << 8;