summaryrefslogtreecommitdiff
path: root/libopie2/opiecore
Unidiff
Diffstat (limited to 'libopie2/opiecore') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp70
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.h16
2 files changed, 32 insertions, 54 deletions
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index 1894e15..e75e777 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -408,62 +408,44 @@ bool Zaurus::setDisplayBrightness( int bright )
408{ 408{
409 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright ); 409 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright );
410 bool res = false; 410 bool res = false;
411 int fd;
412 411
413 if ( bright > 255 ) bright = 255; 412 if ( bright > 255 ) bright = 255;
414 if ( bright < 0 ) bright = 0; 413 if ( bright < 0 ) bright = 0;
415 414
416 if ( m_embedix ) 415 if ( m_embedix )
417 { 416 {
418 if ( d->m_model == Model_Zaurus_SLC7x0 ) 417 int numberOfSteps = displayBrightnessResolution();
419 { 418 int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK );
420 //qDebug( "using special treatment for devices with the corgi backlight interface" ); 419 if ( fd )
421 // special treatment for devices with the corgi backlight interface
422 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 )
423 { 420 {
424 int value = ( bright == 1 ) ? 1 : static_cast<int>( bright * ( 17.0 / 255.0 ) ); 421 int val = ( numberOfSteps * 255 ) / 255;
425 char writeCommand[100]; 422 res = ( ::ioctl ( fd, SHARP_FL_IOCTL_STEP_CONTRAST, val ) == 0 );
426 const int count = sprintf( writeCommand, "%x\n", value );
427 res = ( ::write ( fd, writeCommand, count ) != -1 );
428 ::close ( fd ); 423 ::close ( fd );
429 } 424 }
430 return res;
431 } 425 }
432 else 426 else
433 if ( d->m_model == Model_Zaurus_SL6000 )
434 {
435 //qDebug( "using special treatment for devices with the tosa backlight interface" );
436 // special treatment for devices with the tosa backlight interface
437 if (( fd = ::open ( "/proc/driver/fl/tosa-bl", O_WRONLY )) >= 0 )
438 { 427 {
439 int value = ( bright == 1 ) ? 1 : static_cast<int>( bright * ( 17.0 / 255.0 ) ); 428 qDebug( "ODevice handling for non-embedix kernels not yet implemented" );
440 char writeCommand[100];
441 const int count = sprintf( writeCommand, "%x\n", value );
442 res = ( ::write ( fd, writeCommand, count ) != -1 );
443 ::close ( fd );
444 } 429 }
445 return res; 430 return res;
446 } 431 }
447 else 432
433bool Zaurus::setDisplayStatus( bool on )
434{
435 bool res = false;
436 if ( m_embedix )
448 { 437 {
449 // standard treatment for devices with the dumb embedix frontlight interface 438 int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK );
450 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 439 if ( fd )
451 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 440 {
452 if ( bright && !bl ) 441 int ioctlnum = on ? SHARP_FL_IOCTL_ON : SHARP_FL_IOCTL_OFF;
453 bl = 1; 442 res = ( ::ioctl ( fd, ioctlnum, 0 ) == 0 );
454 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
455 ::close ( fd ); 443 ::close ( fd );
456 } 444 }
457 } 445 }
458 }
459 else 446 else
460 { 447 {
461 // special treatment for the OpenZaurus unified interface 448 qDebug( "ODevice handling for non-embedix kernels not yet implemented" );
462 #define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
463 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) {
464 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 );
465 ::close ( fd );
466 }
467 } 449 }
468 return res; 450 return res;
469} 451}
@@ -486,12 +468,10 @@ bool Zaurus::suspend()
486 ::sync(); // flush fs caches 468 ::sync(); // flush fs caches
487 res = ( ::system ( "apm --suspend" ) == 0 ); 469 res = ( ::system ( "apm --suspend" ) == 0 );
488 470
489 // This is needed because the iPAQ apm implementation is asynchronous and we 471 // This is needed because the apm implementation is asynchronous and we
490 // can not be sure when exactly the device is really suspended 472 // can not be sure when exactly the device is really suspended
491 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
492
493 if ( res ) { 473 if ( res ) {
494 do { // Yes, wait 15 seconds. This APM bug sucks big time. 474 do { // Yes, wait 15 seconds. This APM sucks big time.
495 ::usleep ( 200 * 1000 ); 475 ::usleep ( 200 * 1000 );
496 ::gettimeofday ( &tvn, 0 ); 476 ::gettimeofday ( &tvn, 0 );
497 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); 477 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 );
@@ -557,8 +537,7 @@ ODirection Zaurus::direction() const
557 case Model_Zaurus_SLB600: 537 case Model_Zaurus_SLB600:
558 case Model_Zaurus_SL5500: 538 case Model_Zaurus_SL5500:
559 case Model_Zaurus_SL5000: 539 case Model_Zaurus_SL5000:
560 default: 540 default: dir = d->m_direction;
561 dir = d->m_direction;
562 break; 541 break;
563 } 542 }
564 return dir; 543 return dir;
@@ -569,13 +548,14 @@ int Zaurus::displayBrightnessResolution() const
569{ 548{
570 if (m_embedix) 549 if (m_embedix)
571 { 550 {
572 if ( d->m_model == Model_Zaurus_SLC7x0 ) return 18; 551 int handle = ::open( SHARP_FL_IOCTL_DEVICE, O_RDWR|O_NONBLOCK );
573 if ( d->m_model == Model_Zaurus_SL6000 ) return 18; 552 if ( handle != -1 ) return ::ioctl( handle, SHARP_FL_IOCTL_GET_STEP, 0 );
574 return 5; 553 else return 1;
575 } 554 }
576 else 555 else
577 { 556 {
578 return 256; 557 qDebug( "ODevice handling for non-embedix kernels not yet implemented" );
558 return 1;
579 } 559 }
580} 560}
581 561
diff --git a/libopie2/opiecore/device/odevice_zaurus.h b/libopie2/opiecore/device/odevice_zaurus.h
index dc21546..37ab876 100644
--- a/libopie2/opiecore/device/odevice_zaurus.h
+++ b/libopie2/opiecore/device/odevice_zaurus.h
@@ -76,15 +76,12 @@
76#define APM_EVT_POWER_BUTTON (1 << 0) 76#define APM_EVT_POWER_BUTTON (1 << 0)
77 77
78// Brightness 78// Brightness
79#define FL_IOCTL_STEP_CONTRAST 100 79#define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl"
80 80#define SHARP_FL_IOCTL_ON 1
81#define CORGI_TOSA_BL_IOCTL_ON 1 81#define SHARP_FL_IOCTL_OFF 2
82#define CORGI_TOSA_BL_IOCTL_OFF 2 82#define SHARP_FL_IOCTL_STEP_CONTRAST 100
83#define CORGI_TOSA_BL_IOCTL_STEP_CONTRAST 100 83#define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101
84#define CORGI_TOSA_BL_IOCTL_GET_STEP_CONTRAST 101 84#define SHARP_FL_IOCTL_GET_STEP 102
85#define CORGI_TOSA_BL_IOCTL_GET_STEP 102
86#define CORGI_BL_PROC_DEVICE corgi-bl
87#define TOSA_BL_PROC_DEVICE tosa-bl
88 85
89namespace Opie { 86namespace Opie {
90namespace Core { 87namespace Core {
@@ -99,6 +96,7 @@ class Zaurus : public ODevice
99 virtual bool setSoftSuspend ( bool soft ); 96 virtual bool setSoftSuspend ( bool soft );
100 97
101 virtual bool setDisplayBrightness ( int b ); 98 virtual bool setDisplayBrightness ( int b );
99 virtual bool setDisplayStatus( bool on );
102 virtual int displayBrightnessResolution() const; 100 virtual int displayBrightnessResolution() const;
103 101
104 virtual void playAlarmSound(); 102 virtual void playAlarmSound();