-rw-r--r-- | libopie/odevice.cpp | 111 |
1 files changed, 63 insertions, 48 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index 62dc9d4..17ae389 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp @@ -467,16 +467,19 @@ void ODevice::initButtons ( ) reloadButtonMapping ( ); QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); } ODevice::~ODevice ( ) { +// we leak m_devicebuttons and m_cpu_frequency +// but it's a singleton and it is not so importantant +// -zecke delete d; } bool ODevice::setSoftSuspend ( bool /*soft*/ ) { return false; } @@ -780,17 +783,17 @@ int ODevice::lightSensorResolution ( ) const const QStrList &ODevice::allowedCpuFrequencies ( ) const { return *d->m_cpu_frequencies; } /** * Set desired CPU frequency - * + * * @param index index into d->m_cpu_frequencies of the frequency to be set */ bool ODevice::setCurrentCpuFrequency(uint index) { if (index >= d->m_cpu_frequencies->count()) return false; char *freq = d->m_cpu_frequencies->at(index); @@ -915,21 +918,19 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) buttonFile. setGroup ( "Button" + QString::number ( button )); buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); // buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); } -void ODevice::virtual_hook( int id, void* data ) { - Q_UNUSED(id); - Q_UNUSED(data); -} +void ODevice::virtual_hook(int, void* ){ +} /************************************************** * * iPAQ * **************************************************/ @@ -1643,17 +1644,16 @@ bool Zaurus::setDisplayBrightness ( int bright ) } int Zaurus::displayBrightnessResolution ( ) const { return 5; } - /************************************************** * * SIMpad * **************************************************/ void SIMpad::init ( ) { @@ -1884,17 +1884,17 @@ bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm 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 :) + res = ( ::system ( "cat /dev/fb/0 >/tmp/.buffer; echo > /proc/sys/pm/suspend; cat /tmp/.buffer >/dev/fb/0" ) == 0 ); //TODO make better :) return res; } bool SIMpad::setSoftSuspend ( bool soft ) { qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" ); @@ -1906,33 +1906,31 @@ 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 ); - } + res = ( ::system( (const char*) cmdline ) == 0 ); + 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 ) + if ( bright < 1 ) bright = 0; if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) { int value = 255 - bright; const int mask = SIMPAD_BACKLIGHT_MASK; value = value << 8; value += mask; char writeCommand[100]; @@ -1941,26 +1939,17 @@ bool SIMpad::setDisplayBrightness ( int bright ) ::close ( fd ); } return res; } int SIMpad::displayBrightnessResolution ( ) const { - switch ( model ( )) { - case Model_SIMpad_CL4: - case Model_SIMpad_SL4: - case Model_SIMpad_SLC: - case Model_SIMpad_TSinus: - return 255; //TODO find out if this is save - - default: - return 2; - } + return 255; // All SIMpad models share the same display } /************************************************** * * Ramses * **************************************************/ @@ -1969,19 +1958,18 @@ void Ramses::init() d->m_vendorstr = "M und N"; d->m_vendor = Vendor_MundN; QFile f("/proc/sys/board/ramses"); d->m_modelstr = "Ramses"; d->m_model = Model_Ramses_MNCI; - d->m_rotation = Rot180; - d->m_direction = CW; - d->m_holdtime = 1000; + d->m_rotation = Rot0; + d->m_holdtime = 1000; f.setName("/etc/oz_version"); if (f.open(IO_ReadOnly)) { d->m_systemstr = "OpenEmbedded/Ramses"; d->m_system = System_OpenZaurus; QTextStream ts(&f); @@ -2029,59 +2017,84 @@ void Ramses::timerEvent(QTimerEvent *) m_power_timer = 0; QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, true, false); QWSServer::sendKeyEvent(-1, HardKey_Backlight, 0, false, false); } bool Ramses::setSoftSuspend(bool soft) { - Q_UNUSED(soft); - return true; -} - -bool Ramses::suspend() -{ - //qDebug("Ramses::suspend()"); - if ( !isQWS() ) // only qwsserver is allowed to suspend - return false; - + qDebug("Ramses::setSoftSuspend(%d)", soft); +#if 0 bool res = false; int fd; - if ((fd = ::open("/proc/sys/pm/suspend", O_WRONLY)) >= 0) { - res = ( ::write ( fd, "1", 1 ) != -1 ); + if (((fd = ::open("/dev/apm_bios", O_RDWR)) >= 0) || + ((fd = ::open("/dev/misc/apm_bios",O_RDWR)) >= 0)) { + + int sources = ::ioctl(fd, APM_IOCGEVTSRC, 0); // get current event sources + + if (sources >= 0) { + if (soft) + sources &= ~APM_EVT_POWER_BUTTON; + else + sources |= APM_EVT_POWER_BUTTON; + + if (::ioctl(fd, APM_IOCSEVTSRC, sources) >= 0) // set new event sources + res = true; + else + perror("APM_IOCGEVTSRC"); + } + else + perror("APM_IOCGEVTSRC"); + ::close(fd); } - return res; + else + perror("/dev/apm_bios or /dev/misc/apm_bios"); + + return res; +#else + return true; +#endif +} + +bool Ramses::suspend ( ) +{ + qDebug("Ramses::suspend"); + return false; } /** * This sets the display on or off */ bool Ramses::setDisplayStatus(bool on) { - //qDebug("Ramses::setDisplayStatus(%d)", on); + qDebug("Ramses::setDisplayStatus(%d)", on); +#if 0 bool res = false; int fd; - if ((fd = ::open ("/dev/fb/1", O_RDWR)) >= 0) { + if ((fd = ::open ("/dev/fb/0", O_RDWR)) >= 0) { res = (::ioctl(fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN) == 0); ::close(fd); } return res; +#else + return true; +#endif } /* * We get something between 0..255 into us */ bool Ramses::setDisplayBrightness(int bright) { - //qDebug("Ramses::setDisplayBrightness(%d)", bright); + qDebug("Ramses::setDisplayBrightness(%d)", bright); bool res = false; int fd; // pwm1 brighness: 20 steps 500..0 (dunkel->hell) if (bright > 255 ) bright = 255; if (bright < 0) @@ -2091,53 +2104,55 @@ bool Ramses::setDisplayBrightness(int bright) if ((fd = ::open("/proc/sys/board/lcd_backlight", O_WRONLY)) >= 0) { char writeCommand[10]; const int count = sprintf(writeCommand, "%d\n", bright ? 1 : 0); res = (::write(fd, writeCommand, count) != -1); ::close(fd); } // scale backlight brightness to hardware - if ((fd = ::open("/proc/sys/board/lcd_brightness", O_WRONLY)) >= 0) { - //qDebug(" %d -> pwm1", bright); + bright = 500-(bright * 500 / 255); + if ((fd = ::open("/proc/sys/board/pwm1", O_WRONLY)) >= 0) { + qDebug(" %d -> pwm1", bright); char writeCommand[100]; const int count = sprintf(writeCommand, "%d\n", bright); res = (::write(fd, writeCommand, count) != -1); ::close(fd); } return res; } int Ramses::displayBrightnessResolution() const { - return 256; + return 32; } bool Ramses::setDisplayContrast(int contr) { - //qDebug("Ramses::setDisplayContrast(%d)", contr); + qDebug("Ramses::setDisplayContrast(%d)", contr); bool res = false; int fd; // pwm0 contrast: 20 steps 79..90 (dunkel->hell) if (contr > 255 ) contr = 255; if (contr < 0) contr = 0; + contr = 90 - (contr * 20 / 255); - if ((fd = ::open("/proc/sys/board/lcd_contrast", O_WRONLY)) >= 0) { - //qDebug(" %d -> pwm0", contr); + if ((fd = ::open("/proc/sys/board/pwm0", O_WRONLY)) >= 0) { + qDebug(" %d -> pwm0", contr); char writeCommand[100]; const int count = sprintf(writeCommand, "%d\n", contr); res = (::write(fd, writeCommand, count) != -1); res = true; ::close(fd); } return res; } int Ramses::displayContrastResolution() const { - return 256; + return 20; } |