summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp232
1 files changed, 124 insertions, 108 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index cea4f35..9b2a954 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -57,27 +57,27 @@ public:
57 57
58 QString m_vendorstr; 58 QString m_vendorstr;
59 OVendor m_vendor; 59 OVendor m_vendor;
60 60
61 QString m_modelstr; 61 QString m_modelstr;
62 OModel m_model; 62 OModel m_model;
63 63
64 QString m_systemstr; 64 QString m_systemstr;
65 OSystem m_system; 65 OSystem m_system;
66 66
67 QString m_sysverstr; 67 QString m_sysverstr;
68 68
69 Transformation m_rotation; 69 Transformation m_rotation;
70 70
71 QValueList <ODeviceButton> *m_buttons; 71 QValueList <ODeviceButton> *m_buttons;
72 uint m_holdtime; 72 uint m_holdtime;
73}; 73};
74 74
75 75
76class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 76class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
77protected: 77protected:
78 virtual void init ( ); 78 virtual void init ( );
79 virtual void initButtons ( ); 79 virtual void initButtons ( );
80 80
81public: 81public:
82 virtual bool setSoftSuspend ( bool soft ); 82 virtual bool setSoftSuspend ( bool soft );
83 83
@@ -85,7 +85,7 @@ public:
85 virtual int displayBrightnessResolution ( ) const; 85 virtual int displayBrightnessResolution ( ) const;
86 86
87 virtual void alarmSound ( ); 87 virtual void alarmSound ( );
88 88
89 virtual QValueList <OLed> ledList ( ) const; 89 virtual QValueList <OLed> ledList ( ) const;
90 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 90 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
91 virtual OLedState ledState ( OLed led ) const; 91 virtual OLedState ledState ( OLed led ) const;
@@ -94,13 +94,13 @@ public:
94 virtual bool hasLightSensor ( ) const; 94 virtual bool hasLightSensor ( ) const;
95 virtual int readLightSensor ( ); 95 virtual int readLightSensor ( );
96 virtual int lightSensorResolution ( ) const; 96 virtual int lightSensorResolution ( ) const;
97 97
98protected: 98protected:
99 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 99 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
100 virtual void timerEvent ( QTimerEvent *te ); 100 virtual void timerEvent ( QTimerEvent *te );
101 101
102 int m_power_timer; 102 int m_power_timer;
103 103
104 OLedState m_leds [2]; 104 OLedState m_leds [2];
105}; 105};
106 106
@@ -109,7 +109,7 @@ protected:
109 virtual void init ( ); 109 virtual void init ( );
110 virtual void initButtons ( ); 110 virtual void initButtons ( );
111 111
112 public: 112public:
113 virtual bool setSoftSuspend ( bool soft ); 113 virtual bool setSoftSuspend ( bool soft );
114 114
115 virtual bool setDisplayBrightness ( int b ); 115 virtual bool setDisplayBrightness ( int b );
@@ -117,16 +117,16 @@ public:
117 117
118 virtual void alarmSound ( ); 118 virtual void alarmSound ( );
119 virtual void keySound ( ); 119 virtual void keySound ( );
120 virtual void touchSound ( ); 120 virtual void touchSound ( );
121 121
122 virtual QValueList <OLed> ledList ( ) const; 122 virtual QValueList <OLed> ledList ( ) const;
123 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 123 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
124 virtual OLedState ledState ( OLed led ) const; 124 virtual OLedState ledState ( OLed led ) const;
125 virtual bool setLedState ( OLed led, OLedState st ); 125 virtual bool setLedState ( OLed led, OLedState st );
126 126
127protected: 127protected:
128 virtual void buzzer ( int snd ); 128 virtual void buzzer ( int snd );
129 129
130 OLedState m_leds [1]; 130 OLedState m_leds [1];
131}; 131};
132 132
@@ -141,34 +141,34 @@ struct i_button {
141 char *fheldservice; 141 char *fheldservice;
142 char *fheldaction; 142 char *fheldaction;
143} ipaq_buttons [] = { 143} ipaq_buttons [] = {
144 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 144 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
145 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), 145 Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"),
146 "devicebuttons/ipaq_calendar", 146 "devicebuttons/ipaq_calendar",
147 "datebook", "nextView()", 147 "datebook", "nextView()",
148 "today", "raise()" }, 148 "today", "raise()" },
149 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 149 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
150 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), 150 Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"),
151 "devicebuttons/ipaq_contact", 151 "devicebuttons/ipaq_contact",
152 "addressbook", "raise()", 152 "addressbook", "raise()",
153 "addressbook", "beamBusinessCard()" }, 153 "addressbook", "beamBusinessCard()" },
154 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx, 154 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx,
155 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"), 155 Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "Menu Button"),
156 "devicebuttons/ipaq_menu", 156 "devicebuttons/ipaq_menu",
157 "QPE/TaskBar", "toggleMenu()", 157 "QPE/TaskBar", "toggleMenu()",
158 "QPE/TaskBar", "toggleStartMenu()" }, 158 "QPE/TaskBar", "toggleStartMenu()" },
159 { Model_iPAQ_H38xx | Model_iPAQ_H39xx, 159 { Model_iPAQ_H38xx | Model_iPAQ_H39xx,
160 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"), 160 Qt::Key_F13, QT_TRANSLATE_NOOP("Button", "Mail Button"),
161 "devicebuttons/ipaq_mail", 161 "devicebuttons/ipaq_mail",
162 "mail", "raise()", 162 "mail", "raise()",
163 "mail", "newMail()" }, 163 "mail", "newMail()" },
164 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 164 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
165 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), 165 Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"),
166 "devicebuttons/ipaq_home", 166 "devicebuttons/ipaq_home",
167 "QPE/Launcher", "home()", 167 "QPE/Launcher", "home()",
168 "buttonsettings", "raise()" }, 168 "buttonsettings", "raise()" },
169 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx, 169 { Model_iPAQ_H31xx | Model_iPAQ_H36xx | Model_iPAQ_H37xx | Model_iPAQ_H38xx | Model_iPAQ_H39xx,
170 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"), 170 Qt::Key_F24, QT_TRANSLATE_NOOP("Button", "Record Button"),
171 "devicebuttons/ipaq_record", 171 "devicebuttons/ipaq_record",
172 "QPE/VMemo", "toggleRecord()", 172 "QPE/VMemo", "toggleRecord()",
173 "sound", "raise()" }, 173 "sound", "raise()" },
174}; 174};
@@ -218,7 +218,7 @@ static QCString makeChannel ( const char *str )
218ODevice *ODevice::inst ( ) 218ODevice *ODevice::inst ( )
219{ 219{
220 static ODevice *dev = 0; 220 static ODevice *dev = 0;
221 221
222 if ( !dev ) { 222 if ( !dev ) {
223 if ( QFile::exists ( "/proc/hal/model" )) 223 if ( QFile::exists ( "/proc/hal/model" ))
224 dev = new iPAQ ( ); 224 dev = new iPAQ ( );
@@ -226,7 +226,7 @@ ODevice *ODevice::inst ( )
226 dev = new Zaurus ( ); 226 dev = new Zaurus ( );
227 else 227 else
228 dev = new ODevice ( ); 228 dev = new ODevice ( );
229 229
230 dev-> init ( ); 230 dev-> init ( );
231 } 231 }
232 return dev; 232 return dev;
@@ -254,7 +254,7 @@ ODevice::ODevice ( )
254 d-> m_system = System_Unknown; 254 d-> m_system = System_Unknown;
255 d-> m_sysverstr = "0.0"; 255 d-> m_sysverstr = "0.0";
256 d-> m_rotation = Rot0; 256 d-> m_rotation = Rot0;
257 257
258 d-> m_holdtime = 1000; // 1000ms 258 d-> m_holdtime = 1000; // 1000ms
259 d-> m_buttons = 0; 259 d-> m_buttons = 0;
260} 260}
@@ -263,7 +263,7 @@ void ODevice::systemMessage ( const QCString &msg, const QByteArray & )
263{ 263{
264 if ( msg == "deviceButtonMappingChanged()" ) { 264 if ( msg == "deviceButtonMappingChanged()" ) {
265 reloadButtonMapping ( ); 265 reloadButtonMapping ( );
266 } 266 }
267} 267}
268 268
269void ODevice::init ( ) 269void ODevice::init ( )
@@ -281,10 +281,10 @@ void ODevice::initButtons ( )
281 d-> m_buttons = new QValueList <ODeviceButton>; 281 d-> m_buttons = new QValueList <ODeviceButton>;
282 282
283 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 283 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
284 i_button *ib = ipaq_buttons + i; 284 i_button *ib = ipaq_buttons + i;
285 ODeviceButton b; 285 ODeviceButton b;
286 286
287 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) { 287 if (( ib-> model & Model_iPAQ_H36xx ) == Model_iPAQ_H36xx ) {
288 b. setKeycode ( ib-> code ); 288 b. setKeycode ( ib-> code );
289 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 289 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
290 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 290 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
@@ -294,9 +294,9 @@ void ODevice::initButtons ( )
294 } 294 }
295 } 295 }
296 reloadButtonMapping ( ); 296 reloadButtonMapping ( );
297 297
298 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 298 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
299 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 299 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
300} 300}
301 301
302ODevice::~ODevice ( ) 302ODevice::~ODevice ( )
@@ -323,10 +323,10 @@ bool ODevice::suspend ( )
323 return false; 323 return false;
324 324
325 bool res = false; 325 bool res = false;
326 326
327 struct timeval tvs, tvn; 327 struct timeval tvs, tvn;
328 ::gettimeofday ( &tvs, 0 ); 328 ::gettimeofday ( &tvs, 0 );
329 329
330 ::sync ( ); // flush fs caches 330 ::sync ( ); // flush fs caches
331 res = ( ::system ( "apm --suspend" ) == 0 ); 331 res = ( ::system ( "apm --suspend" ) == 0 );
332 332
@@ -334,13 +334,13 @@ bool ODevice::suspend ( )
334 // can not be sure when exactly the device is really suspended 334 // can not be sure when exactly the device is really suspended
335 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 335 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
336 336
337 if ( res ) { 337 if ( res ) {
338 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed 338 do { // wait at most 1.5 sec: either suspend didn't work or the device resumed
339 ::usleep ( 200 * 1000 ); 339 ::usleep ( 200 * 1000 );
340 ::gettimeofday ( &tvn, 0 ); 340 ::gettimeofday ( &tvn, 0 );
341 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 ); 341 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 1500 );
342 } 342 }
343 343
344 return res; 344 return res;
345} 345}
346 346
@@ -362,11 +362,11 @@ bool ODevice::setDisplayStatus ( bool on )
362 362
363 bool res = false; 363 bool res = false;
364 int fd; 364 int fd;
365 365
366 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { 366 if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) {
367 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 ); 367 res = ( ::ioctl ( fd, FBIOBLANK, on ? VESA_NO_BLANKING : VESA_POWERDOWN ) == 0 );
368 ::close ( fd ); 368 ::close ( fd );
369 } 369 }
370 return res; 370 return res;
371} 371}
372 372
@@ -515,7 +515,7 @@ void ODevice::reloadButtonMapping ( )
515 initButtons ( ); 515 initButtons ( );
516 516
517 Config cfg ( "ButtonSettings" ); 517 Config cfg ( "ButtonSettings" );
518 518
519 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) { 519 for ( uint i = 0; i < d-> m_buttons-> count ( ); i++ ) {
520 ODeviceButton &b = ( *d-> m_buttons ) [i]; 520 ODeviceButton &b = ( *d-> m_buttons ) [i];
521 QString group = "Button" + QString::number ( i ); 521 QString group = "Button" + QString::number ( i );
@@ -523,7 +523,7 @@ void ODevice::reloadButtonMapping ( )
523 QCString pch, hch; 523 QCString pch, hch;
524 QCString pm, hm; 524 QCString pm, hm;
525 QByteArray pdata, hdata; 525 QByteArray pdata, hdata;
526 526
527 if ( cfg. hasGroup ( group )) { 527 if ( cfg. hasGroup ( group )) {
528 cfg. setGroup ( group ); 528 cfg. setGroup ( group );
529 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( ); 529 pch = cfg. readEntry ( "PressedActionChannel" ). latin1 ( );
@@ -534,9 +534,9 @@ void ODevice::reloadButtonMapping ( )
534 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( ); 534 hm = cfg. readEntry ( "HeldActionMessage" ). latin1 ( );
535 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" )); 535 // hdata = decodeBase64 ( buttonFile. readEntry ( "HeldActionArgs" ));
536 } 536 }
537 537
538 b. setPressedAction ( OQCopMessage ( pch, pm, pdata )); 538 b. setPressedAction ( OQCopMessage ( pch, pm, pdata ));
539 539
540 b. setHeldAction ( OQCopMessage ( hch, hm, hdata )); 540 b. setHeldAction ( OQCopMessage ( hch, hm, hdata ));
541 } 541 }
542} 542}
@@ -546,10 +546,10 @@ void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
546 initButtons ( ); 546 initButtons ( );
547 547
548 QString mb_chan; 548 QString mb_chan;
549 549
550 if ( button >= (int) d-> m_buttons-> count ( )) 550 if ( button >= (int) d-> m_buttons-> count ( ))
551 return; 551 return;
552 552
553 ODeviceButton &b = ( *d-> m_buttons ) [button]; 553 ODeviceButton &b = ( *d-> m_buttons ) [button];
554 b. setPressedAction ( action ); 554 b. setPressedAction ( action );
555 555
@@ -571,7 +571,7 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
571 571
572 if ( button >= (int) d-> m_buttons-> count ( )) 572 if ( button >= (int) d-> m_buttons-> count ( ))
573 return; 573 return;
574 574
575 ODeviceButton &b = ( *d-> m_buttons ) [button]; 575 ODeviceButton &b = ( *d-> m_buttons ) [button];
576 b. setHeldAction ( action ); 576 b. setHeldAction ( action );
577 577
@@ -636,22 +636,38 @@ void iPAQ::init ( )
636 } 636 }
637 637
638 f. setName ( "/etc/familiar-version" ); 638 f. setName ( "/etc/familiar-version" );
639 if ( f. open ( IO_ReadOnly )) { 639 if ( f. open ( IO_ReadOnly )) {
640 d-> m_systemstr = "Familiar"; 640 d-> m_systemstr = "Familiar";
641 d-> m_system = System_Familiar; 641 d-> m_system = System_Familiar;
642 642
643 QTextStream ts ( &f ); 643 QTextStream ts ( &f );
644 d-> m_sysverstr = ts. readLine ( ). mid ( 10 ); 644 d-> m_sysverstr = ts. readLine ( ). mid ( 10 );
645 645
646 f. close ( ); 646 f. close ( );
647 } 647 } else {
648 f. setName ( "/etc/oz_version" );
649
650 if ( f. open ( IO_ReadOnly )) {
651 d-> m_systemstr = "OpenEmbedded/iPaq";
652 d-> m_system = System_Familiar;
653
654 QTextStream ts ( &f );
655 ts.setDevice ( &f );
656 d-> m_sysverstr = ts. readLine ( );
657 f. close ( );
658 }
659 }
660
661
662
663
648 664
649 m_leds [0] = m_leds [1] = Led_Off; 665 m_leds [0] = m_leds [1] = Led_Off;
650 666
651 m_power_timer = 0; 667 m_power_timer = 0;
652 668
653 if ( d-> m_qwsserver ) 669 if ( d-> m_qwsserver )
654 QWSServer::setKeyboardFilter ( this ); 670 QWSServer::setKeyboardFilter ( this );
655} 671}
656 672
657void iPAQ::initButtons ( ) 673void iPAQ::initButtons ( )
@@ -662,21 +678,21 @@ void iPAQ::initButtons ( )
662 d-> m_buttons = new QValueList <ODeviceButton>; 678 d-> m_buttons = new QValueList <ODeviceButton>;
663 679
664 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) { 680 for ( uint i = 0; i < ( sizeof( ipaq_buttons ) / sizeof( i_button )); i++ ) {
665 i_button *ib = ipaq_buttons + i; 681 i_button *ib = ipaq_buttons + i;
666 ODeviceButton b; 682 ODeviceButton b;
667 683
668 if (( ib-> model & d-> m_model ) == d-> m_model ) { 684 if (( ib-> model & d-> m_model ) == d-> m_model ) {
669 b. setKeycode ( ib-> code ); 685 b. setKeycode ( ib-> code );
670 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 686 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
671 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 687 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
672 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction )); 688 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib-> fpressedservice ), ib-> fpressedaction ));
673 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction )); 689 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib-> fheldservice ), ib-> fheldaction ));
674 690
675 d-> m_buttons-> append ( b ); 691 d-> m_buttons-> append ( b );
676 } 692 }
677 } 693 }
678 reloadButtonMapping ( ); 694 reloadButtonMapping ( );
679 695
680 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 696 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
681 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 697 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
682} 698}
@@ -719,12 +735,12 @@ QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
719 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast; 735 vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
720 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx ) 736 else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
721 vl << Led_Off; // << Led_On << ??? 737 vl << Led_Off; // << Led_On << ???
722 738
723 return vl; 739 return vl;
724} 740}
725 741
726OLedState iPAQ::ledState ( OLed l ) const 742OLedState iPAQ::ledState ( OLed l ) const
727 { 743{
728 switch ( l ) { 744 switch ( l ) {
729 case Led_Power: 745 case Led_Power:
730 return m_leds [0]; 746 return m_leds [0];
@@ -735,7 +751,7 @@ OLedState iPAQ::ledState ( OLed l ) const
735 } 751 }
736} 752}
737 753
738bool iPAQ::setLedState ( OLed l, OLedState st ) 754bool iPAQ::setLedState ( OLed l, OLedState st )
739{ 755{
740 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK ); 756 static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
741 757
@@ -773,19 +789,19 @@ bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, b
773 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key 789 // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
774 case HardKey_Menu: { 790 case HardKey_Menu: {
775 if (( d-> m_model == Model_iPAQ_H38xx ) || 791 if (( d-> m_model == Model_iPAQ_H38xx ) ||
776 ( d-> m_model == Model_iPAQ_H39xx )) { 792 ( d-> m_model == Model_iPAQ_H39xx )) {
777 newkeycode = HardKey_Mail; 793 newkeycode = HardKey_Mail;
778 } 794 }
779 break; 795 break;
780 } 796 }
781 797
782 // Rotate cursor keys 180° 798 // Rotate cursor keys 180°
783 case Key_Left : 799 case Key_Left :
784 case Key_Right: 800 case Key_Right:
785 case Key_Up : 801 case Key_Up :
786 case Key_Down : { 802 case Key_Down : {
787 if (( d-> m_model == Model_iPAQ_H31xx ) || 803 if (( d-> m_model == Model_iPAQ_H31xx ) ||
788 ( d-> m_model == Model_iPAQ_H38xx )) { 804 ( d-> m_model == Model_iPAQ_H38xx )) {
789 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4; 805 newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
790 } 806 }
791 break; 807 break;
@@ -804,11 +820,11 @@ bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, b
804 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false ); 820 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
805 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false ); 821 QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
806 } 822 }
807 newkeycode = Key_unknown; 823 newkeycode = Key_unknown;
808 break; 824 break;
809 } 825 }
810 } 826 }
811 827
812 if ( newkeycode != keycode ) { 828 if ( newkeycode != keycode ) {
813 if ( newkeycode != Key_unknown ) 829 if ( newkeycode != Key_unknown )
814 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat ); 830 QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
@@ -869,18 +885,18 @@ bool iPAQ::setSoftSuspend ( bool soft )
869{ 885{
870 bool res = false; 886 bool res = false;
871 int fd; 887 int fd;
872 888
873 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) { 889 if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {
874 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 ) 890 if ( ::write ( fd, soft ? "1" : "0", 1 ) == 1 )
875 res = true; 891 res = true;
876 else 892 else
877 ::perror ( "write to /proc/sys/ts/suspend_button_mode" ); 893 ::perror ( "write to /proc/sys/ts/suspend_button_mode" );
878 894
879 ::close ( fd ); 895 ::close ( fd );
880 } 896 }
881 else 897 else
882 ::perror ( "/proc/sys/ts/suspend_button_mode" ); 898 ::perror ( "/proc/sys/ts/suspend_button_mode" );
883 899
884 return res; 900 return res;
885} 901}
886 902
@@ -889,7 +905,7 @@ bool iPAQ::setDisplayBrightness ( int bright )
889{ 905{
890 bool res = false; 906 bool res = false;
891 int fd; 907 int fd;
892 908
893 if ( bright > 255 ) 909 if ( bright > 255 )
894 bright = 255; 910 bright = 255;
895 if ( bright < 0 ) 911 if ( bright < 0 )
@@ -913,14 +929,14 @@ int iPAQ::displayBrightnessResolution ( ) const
913 case Model_iPAQ_H36xx: 929 case Model_iPAQ_H36xx:
914 case Model_iPAQ_H37xx: 930 case Model_iPAQ_H37xx:
915 return 128; // really 256, but >128 could damage the LCD 931 return 128; // really 256, but >128 could damage the LCD
916 932
917 case Model_iPAQ_H38xx: 933 case Model_iPAQ_H38xx:
918 case Model_iPAQ_H39xx: 934 case Model_iPAQ_H39xx:
919 return 64; 935 return 64;
920 936
921 default: 937 default:
922 return 2; 938 return 2;
923 } 939 }
924} 940}
925 941
926 942
@@ -933,19 +949,19 @@ int iPAQ::readLightSensor ( )
933{ 949{
934 int fd; 950 int fd;
935 int val = -1; 951 int val = -1;
936 952
937 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) { 953 if (( fd = ::open ( "/proc/hal/light_sensor", O_RDONLY )) >= 0 ) {
938 char buffer [8]; 954 char buffer [8];
939 955
940 if ( ::read ( fd, buffer, 5 ) == 5 ) { 956 if ( ::read ( fd, buffer, 5 ) == 5 ) {
941 char *endptr; 957 char *endptr;
942 958
943 buffer [4] = 0; 959 buffer [4] = 0;
944 val = ::strtol ( buffer + 2, &endptr, 16 ); 960 val = ::strtol ( buffer + 2, &endptr, 16 );
945 961
946 if ( *endptr != 0 ) 962 if ( *endptr != 0 )
947 val = -1; 963 val = -1;
948 } 964 }
949 ::close ( fd ); 965 ::close ( fd );
950 } 966 }
951 967
@@ -980,7 +996,7 @@ void Zaurus::init ( )
980 f. close ( ); 996 f. close ( );
981 997
982 f. setName ( "/etc/oz_version" ); 998 f. setName ( "/etc/oz_version" );
983 if ( f. open ( IO_ReadOnly )) { 999 if ( f. open ( IO_ReadOnly )) {
984 QTextStream ts ( &f ); 1000 QTextStream ts ( &f );
985 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 ); 1001 d-> m_sysverstr = ts. readLine ( );//. mid ( 10 );
986 f. close ( ); 1002 f. close ( );
@@ -1036,24 +1052,24 @@ void Zaurus::initButtons ( )
1036{ 1052{
1037 if ( d-> m_buttons ) 1053 if ( d-> m_buttons )
1038 return; 1054 return;
1039 1055
1040 d-> m_buttons = new QValueList <ODeviceButton>; 1056 d-> m_buttons = new QValueList <ODeviceButton>;
1041 1057
1042 for ( uint i = 0; i < ( sizeof( z_buttons ) / sizeof( z_button )); i++ ) { 1058 for ( uint i = 0; i < ( sizeof( z_buttons ) / sizeof( z_button )); i++ ) {
1043 z_button *zb = z_buttons + i; 1059 z_button *zb = z_buttons + i;
1044 ODeviceButton b; 1060 ODeviceButton b;
1045 1061
1046 b. setKeycode ( zb-> code ); 1062 b. setKeycode ( zb-> code );
1047 b. setUserText ( QObject::tr ( "Button", zb-> utext )); 1063 b. setUserText ( QObject::tr ( "Button", zb-> utext ));
1048 b. setPixmap ( Resource::loadPixmap ( zb-> pix )); 1064 b. setPixmap ( Resource::loadPixmap ( zb-> pix ));
1049 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction )); 1065 b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( zb-> fpressedservice ), zb-> fpressedaction ));
1050 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction )); 1066 b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( zb-> fheldservice ), zb-> fheldaction ));
1051 1067
1052 d-> m_buttons-> append ( b ); 1068 d-> m_buttons-> append ( b );
1053 } 1069 }
1054 1070
1055 reloadButtonMapping ( ); 1071 reloadButtonMapping ( );
1056 1072
1057 QCopChannel *sysch = new QCopChannel ( "QPE/System", this ); 1073 QCopChannel *sysch = new QCopChannel ( "QPE/System", this );
1058 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & ))); 1074 connect ( sysch, SIGNAL( received( const QCString &, const QByteArray & )), this, SLOT( systemMessage ( const QCString &, const QByteArray & )));
1059} 1075}
@@ -1128,7 +1144,7 @@ typedef struct sharp_led_status {
1128void Zaurus::buzzer ( int sound ) 1144void Zaurus::buzzer ( int sound )
1129{ 1145{
1130 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1146 static int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1131 1147
1132 if ( fd >= 0 ) { 1148 if ( fd >= 0 ) {
1133 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1149 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1134 ::close ( fd ); 1150 ::close ( fd );
@@ -1136,17 +1152,17 @@ void Zaurus::buzzer ( int sound )
1136} 1152}
1137 1153
1138 1154
1139void Zaurus::alarmSound ( ) 1155void Zaurus::alarmSound ( )
1140{ 1156{
1141 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1157 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1142} 1158}
1143 1159
1144void Zaurus::touchSound ( ) 1160void Zaurus::touchSound ( )
1145{ 1161{
1146 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1162 buzzer ( SHARP_BUZ_TOUCHSOUND );
1147} 1163}
1148 1164
1149void Zaurus::keySound ( ) 1165void Zaurus::keySound ( )
1150{ 1166{
1151 buzzer ( SHARP_BUZ_KEYSOUND ); 1167 buzzer ( SHARP_BUZ_KEYSOUND );
1152} 1168}
@@ -1162,7 +1178,7 @@ QValueList <OLed> Zaurus::ledList ( ) const
1162QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1178QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1163{ 1179{
1164 QValueList <OLedState> vl; 1180 QValueList <OLedState> vl;
1165 1181
1166 if ( l == Led_Mail ) 1182 if ( l == Led_Mail )
1167 vl << Led_Off << Led_On << Led_BlinkSlow; 1183 vl << Led_Off << Led_On << Led_BlinkSlow;
1168 return vl; 1184 return vl;
@@ -1172,13 +1188,13 @@ OLedState Zaurus::ledState ( OLed which ) const
1172{ 1188{
1173 if ( which == Led_Mail ) 1189 if ( which == Led_Mail )
1174 return m_leds [0]; 1190 return m_leds [0];
1175 else 1191 else
1176 return Led_Off; 1192 return Led_Off;
1177} 1193}
1178 1194
1179bool Zaurus::setLedState ( OLed which, OLedState st ) 1195bool Zaurus::setLedState ( OLed which, OLedState st )
1180{ 1196{
1181 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK ); 1197 static int fd = ::open ( "/dev/sharp_led", O_RDWR|O_NONBLOCK );
1182 1198
1183 if ( which == Led_Mail ) { 1199 if ( which == Led_Mail ) {
1184 if ( fd >= 0 ) { 1200 if ( fd >= 0 ) {
@@ -1186,19 +1202,19 @@ bool Zaurus::setLedState ( OLed which, OLedState st )
1186 ::memset ( &leds, 0, sizeof( leds )); 1202 ::memset ( &leds, 0, sizeof( leds ));
1187 leds. which = SHARP_LED_MAIL_EXISTS; 1203 leds. which = SHARP_LED_MAIL_EXISTS;
1188 bool ok = true; 1204 bool ok = true;
1189 1205
1190 switch ( st ) { 1206 switch ( st ) {
1191 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break; 1207 case Led_Off : leds. status = LED_MAIL_NO_UNREAD_MAIL; break;
1192 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break; 1208 case Led_On : leds. status = LED_MAIL_NEWMAIL_EXISTS; break;
1193 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break; 1209 case Led_BlinkSlow: leds. status = LED_MAIL_UNREAD_MAIL_EX; break;
1194 default : ok = false; 1210 default : ok = false;
1195 } 1211 }
1196 1212
1197 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) { 1213 if ( ok && ( ::ioctl ( fd, SHARP_LED_SETSTATUS, &leds ) >= 0 )) {
1198 m_leds [0] = st; 1214 m_leds [0] = st;
1199 return true; 1215 return true;
1200 } 1216 }
1201 } 1217 }
1202 } 1218 }
1203 return false; 1219 return false;
1204} 1220}
@@ -1226,12 +1242,12 @@ bool Zaurus::setSoftSuspend ( bool soft )
1226 } 1242 }
1227 else 1243 else
1228 perror ( "APM_IOCGEVTSRC" ); 1244 perror ( "APM_IOCGEVTSRC" );
1229 1245
1230 ::close ( fd ); 1246 ::close ( fd );
1231 } 1247 }
1232 else 1248 else
1233 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1249 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
1234 1250
1235 return res; 1251 return res;
1236} 1252}
1237 1253
@@ -1240,12 +1256,12 @@ bool Zaurus::setDisplayBrightness ( int bright )
1240{ 1256{
1241 bool res = false; 1257 bool res = false;
1242 int fd; 1258 int fd;
1243 1259
1244 if ( bright > 255 ) 1260 if ( bright > 255 )
1245 bright = 255; 1261 bright = 255;
1246 if ( bright < 0 ) 1262 if ( bright < 0 )
1247 bright = 0; 1263 bright = 0;
1248 1264
1249 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1265 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1250 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1266 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1251 if ( bright && !bl ) 1267 if ( bright && !bl )
@@ -1257,7 +1273,7 @@ bool Zaurus::setDisplayBrightness ( int bright )
1257} 1273}
1258 1274
1259 1275
1260int Zaurus::displayBrightnessResolution ( ) const 1276int Zaurus::displayBrightnessResolution ( ) const
1261{ 1277{
1262 return 5; 1278 return 5;
1263} 1279}