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.cpp111
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
@@ -469,12 +469,15 @@ void ODevice::initButtons ( )
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;
@@ -782,13 +785,13 @@ 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;
@@ -917,17 +920,15 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
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
*
@@ -1645,13 +1646,12 @@ bool Zaurus::setDisplayBrightness ( int bright )
int Zaurus::displayBrightnessResolution ( ) const
{
return 5;
}
-
/**************************************************
*
* SIMpad
*
**************************************************/
@@ -1886,13 +1886,13 @@ bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm
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 )
@@ -1908,29 +1908,27 @@ bool SIMpad::setDisplayStatus ( bool on )
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;
@@ -1943,22 +1941,13 @@ bool SIMpad::setDisplayBrightness ( int bright )
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
*
@@ -1971,15 +1960,14 @@ void Ramses::init()
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;
@@ -2031,55 +2019,80 @@ void Ramses::timerEvent(QTimerEvent *)
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 )
@@ -2093,51 +2106,53 @@ bool Ramses::setDisplayBrightness(int bright)
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;
}