summaryrefslogtreecommitdiff
path: root/libopie2/opiecore/device/odevice_zaurus.cpp
authormickeyl <mickeyl>2005-03-31 19:03:55 (UTC)
committer mickeyl <mickeyl>2005-03-31 19:03:55 (UTC)
commit44bfce59cd3cfb2fa6d75675dee5db5edb36e522 (patch) (unidiff)
treec470f3900644e80f7ed975723780563c28aa219a /libopie2/opiecore/device/odevice_zaurus.cpp
parenta06caf5772561e9ce6842dc414686601a78d179c (diff)
downloadopie-44bfce59cd3cfb2fa6d75675dee5db5edb36e522.zip
opie-44bfce59cd3cfb2fa6d75675dee5db5edb36e522.tar.gz
opie-44bfce59cd3cfb2fa6d75675dee5db5edb36e522.tar.bz2
add basic support for the Sharp SL-C1000 (Akita) PDA
Diffstat (limited to 'libopie2/opiecore/device/odevice_zaurus.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiecore/device/odevice_zaurus.cpp53
1 files changed, 30 insertions, 23 deletions
diff --git a/libopie2/opiecore/device/odevice_zaurus.cpp b/libopie2/opiecore/device/odevice_zaurus.cpp
index 8aefc13..3bd7f6e 100644
--- a/libopie2/opiecore/device/odevice_zaurus.cpp
+++ b/libopie2/opiecore/device/odevice_zaurus.cpp
@@ -1,36 +1,36 @@
1/* 1/*
2                 This file is part of the Opie Project 2                 This file is part of the Opie Project
3              Copyright (C) 2002,2003,2004 The Opie Team <opie-devel@handhelds.org> 3              Copyright (C) 2002-2005 The Opie Team <opie-devel@handhelds.org>
4 =. 4 =.
5 .=l. 5 .=l.
6           .>+-= 6           .>+-=
7 _;:,     .>    :=|. This program is free software; you can 7 _;:,     .>    :=|. This program is free software; you can
8.> <`_,   >  .   <= redistribute it and/or modify it under 8.> <`_,   >  .   <= redistribute it and/or modify it under
9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public 9:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
10.="- .-=="i,     .._ License as published by the Free Software 10.="- .-=="i,     .._ License as published by the Free Software
11 - .   .-<_>     .<> Foundation; either version 2 of the License, 11 - .   .-<_>     .<> Foundation; either version 2 of the License,
12     ._= =}       : or (at your option) any later version. 12     ._= =}       : or (at your option) any later version.
13    .%`+i>       _;_. 13    .%`+i>       _;_.
14    .i_,=:_.      -<s. This program is distributed in the hope that 14    .i_,=:_.      -<s. This program is distributed in the hope that
15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY; 15     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
16    : ..    .:,     . . . without even the implied warranty of 16    : ..    .:,     . . . without even the implied warranty of
17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A 17    =_        +     =;=|` MERCHANTABILITY or FITNESS FOR A
18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU 18  _.=:.       :    :=>`: PARTICULAR PURPOSE. See the GNU
19..}^=.=       =       ; Library General Public License for more 19..}^=.=       =       ; Library General Public License for more
20++=   -.     .`     .: details. 20++=   -.     .`     .: details.
21 :     =  ...= . :.=- 21 :     =  ...= . :.=-
22 -.   .:....=;==+<; You should have received a copy of the GNU 22 -.   .:....=;==+<; You should have received a copy of the GNU
23  -_. . .   )=.  = Library General Public License along with 23  -_. . .   )=.  = Library General Public License along with
24    --        :-=` this library; see the file COPYING.LIB. 24    --        :-=` this library; see the file COPYING.LIB.
25 If not, write to the Free Software Foundation, 25 If not, write to the Free Software Foundation,
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#include "odevice_zaurus.h" 30#include "odevice_zaurus.h"
31 31
32/* QT */ 32/* QT */
33#include <qapplication.h> 33#include <qapplication.h>
34#include <qfile.h> 34#include <qfile.h>
35#include <qtextstream.h> 35#include <qtextstream.h>
36#include <qwindowsystem_qws.h> 36#include <qwindowsystem_qws.h>
@@ -190,36 +190,40 @@ void Zaurus::init(const QString& cpu_info)
190 } else if ( model == "SHARP Poodle" ) { 190 } else if ( model == "SHARP Poodle" ) {
191 d->m_model = Model_Zaurus_SLB600; 191 d->m_model = Model_Zaurus_SLB600;
192 d->m_modelstr = "Zaurus SL-B500 or SL-5600"; 192 d->m_modelstr = "Zaurus SL-B500 or SL-5600";
193 } else if ( model == "Sharp-Collie" || model == "Collie" ) { 193 } else if ( model == "Sharp-Collie" || model == "Collie" ) {
194 d->m_model = Model_Zaurus_SL5500; 194 d->m_model = Model_Zaurus_SL5500;
195 d->m_modelstr = "Zaurus SL-5500 or SL-5000d"; 195 d->m_modelstr = "Zaurus SL-5500 or SL-5000d";
196 } else if ( model == "SHARP Tosa" ) { 196 } else if ( model == "SHARP Tosa" ) {
197 d->m_model = Model_Zaurus_SL6000; 197 d->m_model = Model_Zaurus_SL6000;
198 d->m_modelstr = "Zaurus SL-6000"; 198 d->m_modelstr = "Zaurus SL-6000";
199 } else if ( model == "SHARP Spitz" ) { 199 } else if ( model == "SHARP Spitz" ) {
200 d->m_model = Model_Zaurus_SLC3000; 200 d->m_model = Model_Zaurus_SLC3000;
201 d->m_modelstr = "Zaurus SL-C3000"; 201 d->m_modelstr = "Zaurus SL-C3000";
202 } else if ( model == "SHARP Akita" ) {
203 d->m_model = Model_Zaurus_SLC1000;
204 d->m_modelstr = "Zaurus SL-C1000";
202 } else { 205 } else {
203 d->m_model = Model_Zaurus_SL5500; 206 d->m_model = Model_Zaurus_SL5500;
204 d->m_modelstr = "Unknown Zaurus"; 207 d->m_modelstr = "Unknown Zaurus";
205 } 208 }
206 209
207 // set initial rotation 210 // set initial rotation
208 switch( d->m_model ) { 211 switch( d->m_model ) {
209 case Model_Zaurus_SL6000: // fallthrough 212 case Model_Zaurus_SL6000: // fallthrough
210 case Model_Zaurus_SLA300: 213 case Model_Zaurus_SLA300:
211 d->m_rotation = Rot0; 214 d->m_rotation = Rot0;
212 break; 215 break;
213 case Model_Zaurus_SLC3000: // fallthrough 216 case Model_Zaurus_SLC3000: // fallthrough
217 case Model_Zaurus_SLC1000: // fallthrough
214 case Model_Zaurus_SLC7x0: 218 case Model_Zaurus_SLC7x0:
215 d->m_rotation = rotation(); 219 d->m_rotation = rotation();
216 d->m_direction = direction(); 220 d->m_direction = direction();
217 break; 221 break;
218 case Model_Zaurus_SLB600: // fallthrough 222 case Model_Zaurus_SLB600: // fallthrough
219 case Model_Zaurus_SL5000: // fallthrough 223 case Model_Zaurus_SL5000: // fallthrough
220 case Model_Zaurus_SL5500: // fallthrough 224 case Model_Zaurus_SL5500: // fallthrough
221 default: 225 default:
222 d->m_rotation = Rot270; 226 d->m_rotation = Rot270;
223 break; 227 break;
224 } 228 }
225 m_leds[0] = Led_Off; 229 m_leds[0] = Led_Off;
@@ -233,24 +237,25 @@ void Zaurus::init(const QString& cpu_info)
233void Zaurus::initButtons() 237void Zaurus::initButtons()
234{ 238{
235 if ( d->m_buttons ) 239 if ( d->m_buttons )
236 return; 240 return;
237 241
238 242
239 d->m_buttons = new QValueList <ODeviceButton>; 243 d->m_buttons = new QValueList <ODeviceButton>;
240 244
241 struct z_button * pz_buttons; 245 struct z_button * pz_buttons;
242 int buttoncount; 246 int buttoncount;
243 switch ( d->m_model ) { 247 switch ( d->m_model ) {
244 case Model_Zaurus_SLC3000: // fallthrough 248 case Model_Zaurus_SLC3000: // fallthrough
249 case Model_Zaurus_SLC1000: // fallthrough
245 case Model_Zaurus_SLC7x0: 250 case Model_Zaurus_SLC7x0:
246 if ( isQWS( ) ) { 251 if ( isQWS( ) ) {
247 addPreHandler(this); // hinge-sensor-handler 252 addPreHandler(this); // hinge-sensor-handler
248 } 253 }
249 pz_buttons = z_buttons_c700; 254 pz_buttons = z_buttons_c700;
250 buttoncount = ARRAY_SIZE(z_buttons_c700); 255 buttoncount = ARRAY_SIZE(z_buttons_c700);
251 break; 256 break;
252 default: 257 default:
253 pz_buttons = z_buttons; 258 pz_buttons = z_buttons;
254 buttoncount = ARRAY_SIZE(z_buttons); 259 buttoncount = ARRAY_SIZE(z_buttons);
255 break; 260 break;
256 } 261 }
@@ -485,24 +490,25 @@ bool Zaurus::setDisplayStatus( bool on )
485 } 490 }
486 } 491 }
487 return res; 492 return res;
488} 493}
489 494
490Transformation Zaurus::rotation() const 495Transformation Zaurus::rotation() const
491{ 496{
492 qDebug( "Zaurus::rotation()" ); 497 qDebug( "Zaurus::rotation()" );
493 Transformation rot; 498 Transformation rot;
494 499
495 switch ( d->m_model ) { 500 switch ( d->m_model ) {
496 case Model_Zaurus_SLC3000: // fallthrough 501 case Model_Zaurus_SLC3000: // fallthrough
502 case Model_Zaurus_SLC1000: // fallthrough
497 case Model_Zaurus_SLC7x0: 503 case Model_Zaurus_SLC7x0:
498 { 504 {
499 OHingeStatus hs = readHingeSensor(); 505 OHingeStatus hs = readHingeSensor();
500 qDebug( "Zaurus::rotation() - hinge sensor = %d", (int) hs ); 506 qDebug( "Zaurus::rotation() - hinge sensor = %d", (int) hs );
501 507
502 if ( m_embedix ) 508 if ( m_embedix )
503 { 509 {
504 if ( hs == CASE_PORTRAIT ) rot = Rot0; 510 if ( hs == CASE_PORTRAIT ) rot = Rot0;
505 else if ( hs == CASE_UNKNOWN ) rot = Rot0; 511 else if ( hs == CASE_UNKNOWN ) rot = Rot0;
506 else rot = Rot270; 512 else rot = Rot270;
507 } 513 }
508 else 514 else
@@ -522,46 +528,47 @@ Transformation Zaurus::rotation() const
522 rot = d->m_rotation; 528 rot = d->m_rotation;
523 break; 529 break;
524 } 530 }
525 531
526 return rot; 532 return rot;
527} 533}
528ODirection Zaurus::direction() const 534ODirection Zaurus::direction() const
529{ 535{
530 ODirection dir; 536 ODirection dir;
531 537
532 switch ( d->m_model ) { 538 switch ( d->m_model ) {
533 case Model_Zaurus_SLC3000: // fallthrough 539 case Model_Zaurus_SLC3000: // fallthrough
540 case Model_Zaurus_SLC1000: // fallthrough
534 case Model_Zaurus_SLC7x0: { 541 case Model_Zaurus_SLC7x0: {
535 OHingeStatus hs = readHingeSensor(); 542 OHingeStatus hs = readHingeSensor();
536 if ( hs == CASE_PORTRAIT ) dir = CCW; 543 if ( hs == CASE_PORTRAIT ) dir = CCW;
537 else if ( hs == CASE_UNKNOWN ) dir = CCW; 544 else if ( hs == CASE_UNKNOWN ) dir = CCW;
538 else dir = CW; 545 else dir = CW;
539 } 546 }
540 break; 547 break;
541 case Model_Zaurus_SL6000: 548 case Model_Zaurus_SL6000:
542 case Model_Zaurus_SLA300: 549 case Model_Zaurus_SLA300:
543 case Model_Zaurus_SLB600: 550 case Model_Zaurus_SLB600:
544 case Model_Zaurus_SL5500: 551 case Model_Zaurus_SL5500:
545 case Model_Zaurus_SL5000: 552 case Model_Zaurus_SL5000:
546 default: dir = d->m_direction; 553 default: dir = d->m_direction;
547 break; 554 break;
548 } 555 }
549 return dir; 556 return dir;
550 557
551} 558}
552 559
553bool Zaurus::hasHingeSensor() const 560bool Zaurus::hasHingeSensor() const
554{ 561{
555 return d->m_model == Model_Zaurus_SLC7x0 || d->m_model == Model_Zaurus_SLC3000; 562 return d->m_model == Model_Zaurus_SLC7x0 || d->m_model == Model_Zaurus_SLC3000 || d->m_model == Model_Zaurus_SLC1000;
556} 563}
557 564
558OHingeStatus Zaurus::readHingeSensor() const 565OHingeStatus Zaurus::readHingeSensor() const
559{ 566{
560 if (m_embedix) 567 if (m_embedix)
561 { 568 {
562 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 569 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
563 if (handle == -1) 570 if (handle == -1)
564 { 571 {
565 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror 572 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
566 return CASE_UNKNOWN; 573 return CASE_UNKNOWN;
567 } 574 }
@@ -593,25 +600,25 @@ OHingeStatus Zaurus::readHingeSensor() const
593 } 600 }
594} 601}
595 602
596/* 603/*
597 * Take code from iPAQ device. 604 * Take code from iPAQ device.
598 * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction. 605 * That way we switch the cursor directions depending on status of hinge sensor, eg. hardware direction.
599 * I hope that is ok - Alwin 606 * I hope that is ok - Alwin
600 */ 607 */
601bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) 608bool Zaurus::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
602{ 609{
603 int newkeycode = keycode; 610 int newkeycode = keycode;
604 611
605 if (d->m_model!=Model_Zaurus_SLC3000 && d->m_model!=Model_Zaurus_SLC7x0) return false; 612 if (d->m_model != Model_Zaurus_SLC7x0 && d->m_model != Model_Zaurus_SLC3000 && d->m_model != Model_Zaurus_SLC1000) return false;
606 613
607 /* map cursor keys depending on the hinge status */ 614 /* map cursor keys depending on the hinge status */
608 switch ( keycode ) { 615 switch ( keycode ) {
609 // Rotate cursor keys 616 // Rotate cursor keys
610 case Key_Left : 617 case Key_Left :
611 case Key_Right: 618 case Key_Right:
612 case Key_Up : 619 case Key_Up :
613 case Key_Down : 620 case Key_Down :
614 { 621 {
615 if (rotation()==Rot90) { 622 if (rotation()==Rot90) {
616 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; 623 newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4;
617 } 624 }