summaryrefslogtreecommitdiff
path: root/libopie2
authormickeyl <mickeyl>2005-02-06 21:22:57 (UTC)
committer mickeyl <mickeyl>2005-02-06 21:22:57 (UTC)
commitf1a89d7deff682ea52f34a7d160eaa69886aa340 (patch) (unidiff)
tree1386de093a1dd0f8f7ae9f9f415fd4ba9efe4bcc /libopie2
parent03c2e693a5aa0f73f88ce37bbfa1f51b7cdc7043 (diff)
downloadopie-f1a89d7deff682ea52f34a7d160eaa69886aa340.zip
opie-f1a89d7deff682ea52f34a7d160eaa69886aa340.tar.gz
opie-f1a89d7deff682ea52f34a7d160eaa69886aa340.tar.bz2
fix default orientation on 2.6 (this time taking hinge sensor into account)
Diffstat (limited to 'libopie2') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp17
1 files changed, 15 insertions, 2 deletions
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index a59e799..7377965 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -423,186 +423,199 @@ int Zaurus::displayBrightnessResolution() const
423bool Zaurus::setDisplayBrightness( int bright ) 423bool Zaurus::setDisplayBrightness( int bright )
424{ 424{
425 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright ); 425 //qDebug( "Zaurus::setDisplayBrightness( %d )", bright );
426 bool res = false; 426 bool res = false;
427 427
428 if ( bright > 255 ) bright = 255; 428 if ( bright > 255 ) bright = 255;
429 if ( bright < 0 ) bright = 0; 429 if ( bright < 0 ) bright = 0;
430 430
431 int numberOfSteps = displayBrightnessResolution(); 431 int numberOfSteps = displayBrightnessResolution();
432 int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255; 432 int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255;
433 433
434 if ( m_embedix ) 434 if ( m_embedix )
435 { 435 {
436 int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK ); 436 int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK );
437 if ( fd ) 437 if ( fd )
438 { 438 {
439 res = ( ::ioctl( fd, SHARP_FL_IOCTL_STEP_CONTRAST, val ) == 0 ); 439 res = ( ::ioctl( fd, SHARP_FL_IOCTL_STEP_CONTRAST, val ) == 0 );
440 ::close( fd ); 440 ::close( fd );
441 } 441 }
442 } 442 }
443 else 443 else
444 { 444 {
445 int fd = ::open( "/sys/class/backlight/corgi-bl/brightness", O_WRONLY|O_NONBLOCK ); 445 int fd = ::open( "/sys/class/backlight/corgi-bl/brightness", O_WRONLY|O_NONBLOCK );
446 if ( fd ) 446 if ( fd )
447 { 447 {
448 char buf[100]; 448 char buf[100];
449 int len = ::snprintf( &buf[0], sizeof buf, "%d", val ); 449 int len = ::snprintf( &buf[0], sizeof buf, "%d", val );
450 res = ( ::write( fd, &buf[0], len ) == 0 ); 450 res = ( ::write( fd, &buf[0], len ) == 0 );
451 ::close( fd ); 451 ::close( fd );
452 } 452 }
453 } 453 }
454 return res; 454 return res;
455} 455}
456 456
457bool Zaurus::setDisplayStatus( bool on ) 457bool Zaurus::setDisplayStatus( bool on )
458{ 458{
459 bool res = false; 459 bool res = false;
460 if ( m_embedix ) 460 if ( m_embedix )
461 { 461 {
462 int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK ); 462 int fd = ::open( SHARP_FL_IOCTL_DEVICE, O_WRONLY|O_NONBLOCK );
463 if ( fd ) 463 if ( fd )
464 { 464 {
465 int ioctlnum = on ? SHARP_FL_IOCTL_ON : SHARP_FL_IOCTL_OFF; 465 int ioctlnum = on ? SHARP_FL_IOCTL_ON : SHARP_FL_IOCTL_OFF;
466 res = ( ::ioctl ( fd, ioctlnum, 0 ) == 0 ); 466 res = ( ::ioctl ( fd, ioctlnum, 0 ) == 0 );
467 ::close ( fd ); 467 ::close ( fd );
468 } 468 }
469 } 469 }
470 else 470 else
471 { 471 {
472 int fd = ::open( "/sys/class/backlight/corgi-bl/power", O_WRONLY|O_NONBLOCK ); 472 int fd = ::open( "/sys/class/backlight/corgi-bl/power", O_WRONLY|O_NONBLOCK );
473 if ( fd ) 473 if ( fd )
474 { 474 {
475 char buf[10]; 475 char buf[10];
476 buf[0] = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN; 476 buf[0] = on ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN;
477 buf[1] = '\0'; 477 buf[1] = '\0';
478 res = ( ::write( fd, &buf[0], 2 ) == 0 ); 478 res = ( ::write( fd, &buf[0], 2 ) == 0 );
479 ::close( fd ); 479 ::close( fd );
480 } 480 }
481 } 481 }
482 return res; 482 return res;
483} 483}
484 484
485bool Zaurus::suspend() 485bool Zaurus::suspend()
486{ 486{
487 qDebug("ODevice::suspend"); 487 qDebug("ODevice::suspend");
488 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 488 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
489 return false; 489 return false;
490 490
491 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 491 if ( d->m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
492 return false; 492 return false;
493 493
494 bool res = false; 494 bool res = false;
495 ODevice::sendSuspendmsg(); 495 ODevice::sendSuspendmsg();
496 496
497 struct timeval tvs, tvn; 497 struct timeval tvs, tvn;
498 ::gettimeofday ( &tvs, 0 ); 498 ::gettimeofday ( &tvs, 0 );
499 499
500 ::sync(); // flush fs caches 500 ::sync(); // flush fs caches
501 res = ( ::system ( "apm --suspend" ) == 0 ); 501 res = ( ::system ( "apm --suspend" ) == 0 );
502 502
503 // This is needed because the apm implementation is asynchronous and we 503 // This is needed because the apm implementation is asynchronous and we
504 // can not be sure when exactly the device is really suspended 504 // can not be sure when exactly the device is really suspended
505 if ( res ) { 505 if ( res ) {
506 do { // Yes, wait 15 seconds. This APM sucks big time. 506 do { // Yes, wait 15 seconds. This APM sucks big time.
507 ::usleep ( 200 * 1000 ); 507 ::usleep ( 200 * 1000 );
508 ::gettimeofday ( &tvn, 0 ); 508 ::gettimeofday ( &tvn, 0 );
509 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); 509 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 );
510 } 510 }
511 511
512 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" ); 512 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" );
513 return res; 513 return res;
514} 514}
515 515
516 516
517Transformation Zaurus::rotation() const 517Transformation Zaurus::rotation() const
518{ 518{
519 qDebug( "Zaurus::rotation()" );
519 Transformation rot; 520 Transformation rot;
520 521
521 switch ( d->m_model ) { 522 switch ( d->m_model ) {
522 case Model_Zaurus_SLC3000: // fallthrough 523 case Model_Zaurus_SLC3000: // fallthrough
523 case Model_Zaurus_SLC7x0: { 524 case Model_Zaurus_SLC7x0:
524 OHingeStatus hs = readHingeSensor(); 525 {
526 OHingeStatus hs = readHingeSensor();
527 qDebug( "Zaurus::rotation() - hinge sensor = %d", (int) hs );
528
529 if ( m_embedix )
530 {
525 if ( hs == CASE_PORTRAIT ) rot = Rot0; 531 if ( hs == CASE_PORTRAIT ) rot = Rot0;
526 else if ( hs == CASE_UNKNOWN ) rot = Rot0; 532 else if ( hs == CASE_UNKNOWN ) rot = Rot0;
527 else rot = Rot270; 533 else rot = Rot270;
528 } 534 }
535 else
536 {
537 if ( hs == CASE_PORTRAIT ) rot = Rot270;
538 else if ( hs == CASE_UNKNOWN ) rot = Rot0;
539 else rot = Rot0;
540 }
541 }
529 break; 542 break;
530 case Model_Zaurus_SL6000: 543 case Model_Zaurus_SL6000:
531 case Model_Zaurus_SLB600: 544 case Model_Zaurus_SLB600:
532 case Model_Zaurus_SLA300: 545 case Model_Zaurus_SLA300:
533 case Model_Zaurus_SL5500: 546 case Model_Zaurus_SL5500:
534 case Model_Zaurus_SL5000: 547 case Model_Zaurus_SL5000:
535 default: 548 default:
536 rot = d->m_rotation; 549 rot = d->m_rotation;
537 break; 550 break;
538 } 551 }
539 552
540 return rot; 553 return rot;
541} 554}
542ODirection Zaurus::direction() const 555ODirection Zaurus::direction() const
543{ 556{
544 ODirection dir; 557 ODirection dir;
545 558
546 switch ( d->m_model ) { 559 switch ( d->m_model ) {
547 case Model_Zaurus_SLC3000: // fallthrough 560 case Model_Zaurus_SLC3000: // fallthrough
548 case Model_Zaurus_SLC7x0: { 561 case Model_Zaurus_SLC7x0: {
549 OHingeStatus hs = readHingeSensor(); 562 OHingeStatus hs = readHingeSensor();
550 if ( hs == CASE_PORTRAIT ) dir = CCW; 563 if ( hs == CASE_PORTRAIT ) dir = CCW;
551 else if ( hs == CASE_UNKNOWN ) dir = CCW; 564 else if ( hs == CASE_UNKNOWN ) dir = CCW;
552 else dir = CW; 565 else dir = CW;
553 } 566 }
554 break; 567 break;
555 case Model_Zaurus_SL6000: 568 case Model_Zaurus_SL6000:
556 case Model_Zaurus_SLA300: 569 case Model_Zaurus_SLA300:
557 case Model_Zaurus_SLB600: 570 case Model_Zaurus_SLB600:
558 case Model_Zaurus_SL5500: 571 case Model_Zaurus_SL5500:
559 case Model_Zaurus_SL5000: 572 case Model_Zaurus_SL5000:
560 default: dir = d->m_direction; 573 default: dir = d->m_direction;
561 break; 574 break;
562 } 575 }
563 return dir; 576 return dir;
564 577
565} 578}
566 579
567bool Zaurus::hasHingeSensor() const 580bool Zaurus::hasHingeSensor() const
568{ 581{
569 return d->m_model == Model_Zaurus_SLC7x0 || d->m_model == Model_Zaurus_SLC3000; 582 return d->m_model == Model_Zaurus_SLC7x0 || d->m_model == Model_Zaurus_SLC3000;
570} 583}
571 584
572OHingeStatus Zaurus::readHingeSensor() const 585OHingeStatus Zaurus::readHingeSensor() const
573{ 586{
574 if (m_embedix) 587 if (m_embedix)
575 { 588 {
576 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 589 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
577 if (handle == -1) 590 if (handle == -1)
578 { 591 {
579 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror 592 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
580 return CASE_UNKNOWN; 593 return CASE_UNKNOWN;
581 } 594 }
582 else 595 else
583 { 596 {
584 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 597 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
585 ::close (handle); 598 ::close (handle);
586 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE ) 599 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
587 { 600 {
588 qDebug( "Zaurus::readHingeSensor() - result = %d", retval ); 601 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
589 return static_cast<OHingeStatus>( retval ); 602 return static_cast<OHingeStatus>( retval );
590 } 603 }
591 else 604 else
592 { 605 {
593 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 606 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
594 return CASE_UNKNOWN; 607 return CASE_UNKNOWN;
595 } 608 }
596 } 609 }
597 } 610 }
598 else 611 else
599 { 612 {
600 // corgi keyboard is event source 0 in OZ kernel 2.6 613 // corgi keyboard is event source 0 in OZ kernel 2.6
601 OInputDevice* keyboard = OInputSystem::instance()->device( "event0" ); 614 OInputDevice* keyboard = OInputSystem::instance()->device( "event0" );
602 if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE; 615 if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE;
603 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT; 616 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT;
604 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED; 617 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED;
605 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 618 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
606 return CASE_UNKNOWN; 619 return CASE_UNKNOWN;
607 } 620 }
608} 621}