summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_abstractmobiledevice.h44
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp27
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.h1
3 files changed, 50 insertions, 22 deletions
diff --git a/libopie2/opiecore/device/odevice_abstractmobiledevice.h b/libopie2/opiecore/device/odevice_abstractmobiledevice.h
index 9467e82..335b02f 100644
--- a/libopie2/opiecore/device/odevice_abstractmobiledevice.h
+++ b/libopie2/opiecore/device/odevice_abstractmobiledevice.h
@@ -1,64 +1,64 @@
1/* 1/*
2                 This file is part of the Opie Project 2 This file is part of the Opie Project
3              Copyright (C) 2004, 2005 Holger Hans Peter Freyther <freyther@handhelds.org> 3 Copyright (C) 2004, 2005 Holger Hans Peter Freyther <freyther@handhelds.org>
4 Copyright (C) 2004, 2005 Michael 'mickey' Lauer <mickeyl@handhelds.org> 4 Copyright (C) 2004, 2005 Michael 'mickey' Lauer <mickeyl@handhelds.org>
5 5
6 6
7 =. 7 =.
8 .=l. 8 .=l.
9           .>+-= 9 .>+-=
10 _;:,     .>    :=|. This program is free software; you can 10_;:, .> :=|. This program is free software; you can
11.> <`_,   >  .   <= redistribute it and/or modify it under 11.> <`_, > . <= redistribute it and/or modify it under
12:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 12:`=1 )Y*s>-.-- : the terms of the GNU Library General Public
13.="- .-=="i,     .._ License as published by the Free Software 13.="- .-=="i, .._ License as published by the Free Software
14 - .   .-<_>     .<> Foundation; either version 2 of the License, 14- . .-<_> .<> Foundation; either version 2 of the License,
15     ._= =}       : or (at your option) any later version. 15 ._= =} : or (at your option) any later version.
16    .%`+i>       _;_. 16 .%`+i> _;_.
17    .i_,=:_.      -<s. This program is distributed in the hope that 17 .i_,=:_. -<s. This program is distributed in the hope that
18     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 18 + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
19    : ..    .:,     . . . without even the implied warranty of 19 : .. .:, . . . without even the implied warranty of
20    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 20 =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
21  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 21 _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU
22..}^=.=       =       ; Library General Public License for more 22..}^=.= = ; Library General Public License for more
23++=   -.     .`     .: details. 23++= -. .` .: details.
24 :     =  ...= . :.=- 24: = ...= . :.=-
25 -.   .:....=;==+<; You should have received a copy of the GNU 25-. .:....=;==+<; You should have received a copy of the GNU
26  -_. . .   )=.  = Library General Public License along with 26 -_. . . )=. = Library General Public License along with
27    --        :-=` this library; see the file COPYING.LIB. 27 -- :-=` this library; see the file COPYING.LIB.
28 If not, write to the Free Software Foundation, 28 If not, write to the Free Software Foundation,
29 Inc., 59 Temple Place - Suite 330, 29 Inc., 59 Temple Place - Suite 330,
30 Boston, MA 02111-1307, USA. 30 Boston, MA 02111-1307, USA.
31*/ 31*/
32 32
33#ifndef OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE 33#ifndef OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE
34#define OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE 34#define OPIE_CORE_DEVICE_ABSTRACT_MOBILE_DEVICE
35 35
36#include "odevice.h" 36#include "odevice.h"
37 37
38namespace Opie { 38namespace Opie {
39namespace Core { 39namespace Core {
40/** 40/**
41 * @short Common Implementations for Linux Handheld Devices 41 * @short Common Implementations for Linux Handheld Devices
42 * 42 *
43 * Abstract Class with implementation for suspending using 43 * Abstract Class with implementation for suspending using
44 * asynchrnonus apm implementations and displaystatus using 44 * asynchrnonus apm implementations and displaystatus using
45 * the Linux Frame Buffer API 45 * the Linux Frame Buffer API
46 * 46 *
47 */ 47 */
48class OAbstractMobileDevice : public ODevice { 48class OAbstractMobileDevice : public ODevice {
49 Q_OBJECT 49 Q_OBJECT
50protected: 50protected:
51 OAbstractMobileDevice(); 51 OAbstractMobileDevice();
52 void setAPMTimeOut( int time ); 52 void setAPMTimeOut( int time );
53public: 53public:
54 virtual bool suspend(); 54 virtual bool suspend();
55 virtual bool setDisplayStatus(bool); 55 virtual bool setDisplayStatus(bool);
56 56
57private: 57protected:
58 int m_timeOut; 58 int m_timeOut;
59}; 59};
60} 60}
61} 61}
62 62
63 63
64#endif 64#endif
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index 72378ff..8aefc13 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -535,96 +535,123 @@ ODirection Zaurus::direction() const
535 OHingeStatus hs = readHingeSensor(); 535 OHingeStatus hs = readHingeSensor();
536 if ( hs == CASE_PORTRAIT ) dir = CCW; 536 if ( hs == CASE_PORTRAIT ) dir = CCW;
537 else if ( hs == CASE_UNKNOWN ) dir = CCW; 537 else if ( hs == CASE_UNKNOWN ) dir = CCW;
538 else dir = CW; 538 else dir = CW;
539 } 539 }
540 break; 540 break;
541 case Model_Zaurus_SL6000: 541 case Model_Zaurus_SL6000:
542 case Model_Zaurus_SLA300: 542 case Model_Zaurus_SLA300:
543 case Model_Zaurus_SLB600: 543 case Model_Zaurus_SLB600:
544 case Model_Zaurus_SL5500: 544 case Model_Zaurus_SL5500:
545 case Model_Zaurus_SL5000: 545 case Model_Zaurus_SL5000:
546 default: dir = d->m_direction; 546 default: dir = d->m_direction;
547 break; 547 break;
548 } 548 }
549 return dir; 549 return dir;
550 550
551} 551}
552 552
553bool Zaurus::hasHingeSensor() const 553bool Zaurus::hasHingeSensor() const
554{ 554{
555 return d->m_model == Model_Zaurus_SLC7x0 || d->m_model == Model_Zaurus_SLC3000; 555 return d->m_model == Model_Zaurus_SLC7x0 || d->m_model == Model_Zaurus_SLC3000;
556} 556}
557 557
558OHingeStatus Zaurus::readHingeSensor() const 558OHingeStatus Zaurus::readHingeSensor() const
559{ 559{
560 if (m_embedix) 560 if (m_embedix)
561 { 561 {
562 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 562 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
563 if (handle == -1) 563 if (handle == -1)
564 { 564 {
565 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror 565 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
566 return CASE_UNKNOWN; 566 return CASE_UNKNOWN;
567 } 567 }
568 else 568 else
569 { 569 {
570 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 570 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
571 ::close (handle); 571 ::close (handle);
572 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE ) 572 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
573 { 573 {
574 qDebug( "Zaurus::readHingeSensor() - result = %d", retval ); 574 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
575 return static_cast<OHingeStatus>( retval ); 575 return static_cast<OHingeStatus>( retval );
576 } 576 }
577 else 577 else
578 { 578 {
579 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 579 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
580 return CASE_UNKNOWN; 580 return CASE_UNKNOWN;
581 } 581 }
582 } 582 }
583 } 583 }
584 else 584 else
585 { 585 {
586 // corgi keyboard is event source 0 in OZ kernel 2.6 586 // corgi keyboard is event source 0 in OZ kernel 2.6
587 OInputDevice* keyboard = OInputSystem::instance()->device( "event0" ); 587 OInputDevice* keyboard = OInputSystem::instance()->device( "event0" );
588 if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE; 588 if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP0 ) ) return CASE_LANDSCAPE;
589 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT; 589 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP1 ) ) return CASE_PORTRAIT;
590 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED; 590 else if ( keyboard && keyboard->isHeld( OInputDevice::Key_KP2 ) ) return CASE_CLOSED;
591 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 591 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
592 return CASE_UNKNOWN; 592 return CASE_UNKNOWN;
593 } 593 }
594} 594}
595 595
596/* 596/*
597 * Take code from iPAQ device. 597 * Take code from iPAQ device.
598 * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. 598 * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction.
599 * I hope that is ok - Alwin 599 * I hope that is ok - Alwin
600 */ 600 */
601bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 601bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
602{ 602{
603 int newkeycode = keycode; 603 int newkeycode = keycode;
604 604
605 if (d->m_model!=Model_Zaurus_SLC3000 && d->m_model!=Model_Zaurus_SLC7x0) return false; 605 if (d->m_model!=Model_Zaurus_SLC3000 && d->m_model!=Model_Zaurus_SLC7x0) return false;
606 606
607 /* map cursor keys depending on the hinge status */ 607 /* map cursor keys depending on the hinge status */
608 switch ( keycode ) { 608 switch ( keycode ) {
609 // Rotate cursor keys 609 // Rotate cursor keys
610 case Key_Left : 610 case Key_Left :
611 case Key_Right: 611 case Key_Right:
612 case Key_Up : 612 case Key_Up :
613 case Key_Down : 613 case Key_Down :
614 { 614 {
615 if (rotation()==Rot90) { 615 if (rotation()==Rot90) {
616 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; 616 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
617 } 617 }
618 } 618 }
619 break; 619 break;
620 620
621 } 621 }
622 if (newkeycode!=keycode) { 622 if (newkeycode!=keycode) {
623 if ( newkeycode != Key_unknown ) { 623 if ( newkeycode != Key_unknown ) {
624 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 624 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
625 } 625 }
626 return true; 626 return true;
627 } 627 }
628 return false; 628 return false;
629} 629}
630 630
631bool Zaurus::suspend() {
632 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
633 return false;
634
635 bool res = false;
636 OAbstractMobileDevice::sendSuspendmsg();
637
638 struct timeval tvs, tvn;
639 ::gettimeofday ( &tvs, 0 );
640
641 ::sync(); // flush fs caches
642 res = ( ::system ( "apm --suspend" ) == 0 );
643
644 // This is needed because some apm implementations are asynchronous and we
645 // can not be sure when exactly the device is really suspended
646 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
647 // on non embedix eg. 2.6 kernel line apm is synchronous so we don't need it here.
648
649 if ( res && m_embedix) {
650 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
651 ::usleep ( 200 * 1000 );
652 ::gettimeofday ( &tvn, 0 );
653 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < m_timeOut );
654 }
655
656 return res;
657}
diff --git a/libopie2/opiecore/device/odevice_zaurus.h b/libopie2/opiecore/device/odevice_zaurus.h
index 1fb0cd9..4548e35 100644
--- a/libopie2/opiecore/device/odevice_zaurus.h
+++ b/libopie2/opiecore/device/odevice_zaurus.h
@@ -26,118 +26,119 @@
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29 29
30#ifndef ODEVICE_ZAURUS 30#ifndef ODEVICE_ZAURUS
31#define ODEVICE_ZAURUS 31#define ODEVICE_ZAURUS
32 32
33#include "odevice_abstractmobiledevice.h" 33#include "odevice_abstractmobiledevice.h"
34 34
35/* QT */ 35/* QT */
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
37 37
38#ifndef ARRAY_SIZE 38#ifndef ARRAY_SIZE
39#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 39#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
40#endif 40#endif
41 41
42// _IO and friends are only defined in kernel headers ... 42// _IO and friends are only defined in kernel headers ...
43#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 43#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
44#define OD_IO(type,number) OD_IOC(0,type,number,0) 44#define OD_IO(type,number) OD_IOC(0,type,number,0)
45#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 45#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
46#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 46#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
47#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 47#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
48 48
49// Audio 49// Audio
50#define SHARP_DEV_IOCTL_COMMAND_START 0x5680 50#define SHARP_DEV_IOCTL_COMMAND_START 0x5680
51 51
52#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 52#define SHARP_BUZZER_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
53#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START) 53#define SHARP_BUZZER_MAKESOUND (SHARP_BUZZER_IOCTL_START)
54 54
55#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */ 55#define SHARP_BUZ_TOUCHSOUND 1 /* touch panel sound */
56#define SHARP_BUZ_KEYSOUND 2 /* key sound */ 56#define SHARP_BUZ_KEYSOUND 2 /* key sound */
57#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */ 57#define SHARP_BUZ_SCHEDULE_ALARM 11 /* schedule alarm */
58 58
59#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1) 59#define SHARP_BUZZER_SETVOLUME (SHARP_BUZZER_IOCTL_START+1)
60#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2) 60#define SHARP_BUZZER_GETVOLUME (SHARP_BUZZER_IOCTL_START+2)
61#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3) 61#define SHARP_BUZZER_ISSUPPORTED (SHARP_BUZZER_IOCTL_START+3)
62#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4) 62#define SHARP_BUZZER_SETMUTE (SHARP_BUZZER_IOCTL_START+4)
63#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5) 63#define SHARP_BUZZER_STOPSOUND (SHARP_BUZZER_IOCTL_START+5)
64 64
65// LED 65// LED
66#define SHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START) 66#define SHARP_LED_IOCTL_START (SHARP_DEV_IOCTL_COMMAND_START)
67#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1) 67#define SHARP_LED_SETSTATUS (SHARP_LED_IOCTL_START+1)
68#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */ 68#define SHARP_LED_MAIL_EXISTS 9 /* mail status (exists or not) */
69 69
70#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */ 70#define LED_MAIL_NO_UNREAD_MAIL 0 /* for SHARP_LED_MAIL_EXISTS */
71#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */ 71#define LED_MAIL_NEWMAIL_EXISTS 1 /* for SHARP_LED_MAIL_EXISTS */
72#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */ 72#define LED_MAIL_UNREAD_MAIL_EX 2 /* for SHARP_LED_MAIL_EXISTS */
73 73
74// Rotation and Power Management 74// Rotation and Power Management
75#define SHARP_IOCTL_GET_ROTATION 0x413c 75#define SHARP_IOCTL_GET_ROTATION 0x413c
76 76
77#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int ) 77#define APM_IOCGEVTSRC OD_IOR( 'A', 203, int )
78#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int ) 78#define APM_IOCSEVTSRC OD_IORW( 'A', 204, int )
79#define APM_EVT_POWER_BUTTON (1 << 0) 79#define APM_EVT_POWER_BUTTON (1 << 0)
80 80
81// Brightness Embedix 81// Brightness Embedix
82#define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl" 82#define SHARP_FL_IOCTL_DEVICE "/dev/sharp_fl"
83#define SHARP_FL_IOCTL_ON 1 83#define SHARP_FL_IOCTL_ON 1
84#define SHARP_FL_IOCTL_OFF 2 84#define SHARP_FL_IOCTL_OFF 2
85#define SHARP_FL_IOCTL_STEP_CONTRAST 100 85#define SHARP_FL_IOCTL_STEP_CONTRAST 100
86#define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101 86#define SHARP_FL_IOCTL_GET_STEP_CONTRAST 101
87#define SHARP_FL_IOCTL_GET_STEP 102 87#define SHARP_FL_IOCTL_GET_STEP 102
88 88
89// Vesa Standard 89// Vesa Standard
90#define FB_BLANK_UNBLANK 0 90#define FB_BLANK_UNBLANK 0
91#define FB_BLANK_POWERDOWN 4 91#define FB_BLANK_POWERDOWN 4
92 92
93namespace Opie { 93namespace Opie {
94namespace Core { 94namespace Core {
95namespace Internal { 95namespace Internal {
96 96
97class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter 97class Zaurus : public OAbstractMobileDevice, public QWSServer::KeyboardFilter
98{ 98{
99 protected: 99 protected:
100 virtual void init(const QString&); 100 virtual void init(const QString&);
101 virtual void initButtons(); 101 virtual void initButtons();
102 102
103 public: 103 public:
104 virtual bool setDisplayBrightness( int b ); 104 virtual bool setDisplayBrightness( int b );
105 virtual bool setDisplayStatus( bool on ); 105 virtual bool setDisplayStatus( bool on );
106 virtual int displayBrightnessResolution() const; 106 virtual int displayBrightnessResolution() const;
107 107
108 virtual void playAlarmSound(); 108 virtual void playAlarmSound();
109 virtual void playKeySound(); 109 virtual void playKeySound();
110 virtual void playTouchSound(); 110 virtual void playTouchSound();
111 111
112 virtual QValueList <OLed> ledList() const; 112 virtual QValueList <OLed> ledList() const;
113 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 113 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
114 virtual OLedState ledState( OLed led ) const; 114 virtual OLedState ledState( OLed led ) const;
115 virtual bool setLedState( OLed led, OLedState st ); 115 virtual bool setLedState( OLed led, OLedState st );
116 116
117 virtual bool hasHingeSensor() const; 117 virtual bool hasHingeSensor() const;
118 virtual OHingeStatus readHingeSensor() const; 118 virtual OHingeStatus readHingeSensor() const;
119 119
120 virtual Transformation rotation() const; 120 virtual Transformation rotation() const;
121 virtual ODirection direction() const; 121 virtual ODirection direction() const;
122 virtual bool suspend();
122 123
123 protected: 124 protected:
124 virtual void buzzer( int snd ); 125 virtual void buzzer( int snd );
125 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 126 virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
126 127
127 OLedState m_leds[1]; 128 OLedState m_leds[1];
128 bool m_embedix; 129 bool m_embedix;
129}; 130};
130 131
131struct z_button { 132struct z_button {
132 Qt::Key code; 133 Qt::Key code;
133 char *utext; 134 char *utext;
134 char *pix; 135 char *pix;
135 char *fpressedservice; 136 char *fpressedservice;
136 char *fpressedaction; 137 char *fpressedaction;
137 char *fheldservice; 138 char *fheldservice;
138 char *fheldaction; 139 char *fheldaction;
139}; 140};
140} 141}
141} 142}
142} 143}
143#endif 144#endif