summaryrefslogtreecommitdiff
authorzecke <zecke>2004-02-19 20:29:53 (UTC)
committer zecke <zecke>2004-02-19 20:29:53 (UTC)
commitf6f89c9fad356f91f1ad63402757335f7fb4fed2 (patch) (unidiff)
tree9646358fb1b6bdec12fa29971936cbe63ad8f06b
parentc2eb77f6b8933b02bd8bd59ec7325da0bfc956cb (diff)
downloadopie-f6f89c9fad356f91f1ad63402757335f7fb4fed2.zip
opie-f6f89c9fad356f91f1ad63402757335f7fb4fed2.tar.gz
opie-f6f89c9fad356f91f1ad63402757335f7fb4fed2.tar.bz2
Restore binary compatibility and make use of the virtual_hook
Yeah it is ugly... but will work for libopie... Now onto libopie2! development
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp112
-rw-r--r--libopie/odevice.h24
2 files changed, 107 insertions, 29 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index c5a916b..c5342e1 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -46,64 +46,65 @@
46#endif 46#endif
47 47
48// _IO and friends are only defined in kernel headers ... 48// _IO and friends are only defined in kernel headers ...
49 49
50#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 )) 50#define OD_IOC(dir,type,number,size) (( dir << 30 ) | ( type << 8 ) | ( number ) | ( size << 16 ))
51 51
52#define OD_IO(type,number) OD_IOC(0,type,number,0) 52#define OD_IO(type,number) OD_IOC(0,type,number,0)
53#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size)) 53#define OD_IOW(type,number,size) OD_IOC(1,type,number,sizeof(size))
54#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size)) 54#define OD_IOR(type,number,size) OD_IOC(2,type,number,sizeof(size))
55#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size)) 55#define OD_IORW(type,number,size) OD_IOC(3,type,number,sizeof(size))
56 56
57using namespace Opie; 57using namespace Opie;
58 58
59class ODeviceData { 59class ODeviceData {
60public: 60public:
61 QString m_vendorstr; 61 QString m_vendorstr;
62 OVendor m_vendor; 62 OVendor m_vendor;
63 63
64 QString m_modelstr; 64 QString m_modelstr;
65 OModel m_model; 65 OModel m_model;
66 66
67 QString m_systemstr; 67 QString m_systemstr;
68 OSystem m_system; 68 OSystem m_system;
69 69
70 QString m_sysverstr; 70 QString m_sysverstr;
71 71
72 Transformation m_rotation; 72 Transformation m_rotation;
73 ODirection m_direction; 73 ODirection m_direction;
74 74
75 QValueList <ODeviceButton> *m_buttons; 75 QValueList <ODeviceButton> *m_buttons;
76 uint m_holdtime; 76 uint m_holdtime;
77 QStrList *m_cpu_frequencies; 77 QStrList *m_cpu_frequencies;
78
78}; 79};
79 80
80class iPAQ : public ODevice, public QWSServer::KeyboardFilter { 81class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
81protected: 82protected:
82 virtual void init ( ); 83 virtual void init ( );
83 virtual void initButtons ( ); 84 virtual void initButtons ( );
84 85
85public: 86public:
86 virtual bool setSoftSuspend ( bool soft ); 87 virtual bool setSoftSuspend ( bool soft );
87 88
88 virtual bool setDisplayBrightness ( int b ); 89 virtual bool setDisplayBrightness ( int b );
89 virtual int displayBrightnessResolution ( ) const; 90 virtual int displayBrightnessResolution ( ) const;
90 91
91 virtual void alarmSound ( ); 92 virtual void alarmSound ( );
92 93
93 virtual QValueList <OLed> ledList ( ) const; 94 virtual QValueList <OLed> ledList ( ) const;
94 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 95 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
95 virtual OLedState ledState ( OLed led ) const; 96 virtual OLedState ledState ( OLed led ) const;
96 virtual bool setLedState ( OLed led, OLedState st ); 97 virtual bool setLedState ( OLed led, OLedState st );
97 98
98 virtual bool hasLightSensor ( ) const; 99 virtual bool hasLightSensor ( ) const;
99 virtual int readLightSensor ( ); 100 virtual int readLightSensor ( );
100 virtual int lightSensorResolution ( ) const; 101 virtual int lightSensorResolution ( ) const;
101 102
102protected: 103protected:
103 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 104 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
104 virtual void timerEvent ( QTimerEvent *te ); 105 virtual void timerEvent ( QTimerEvent *te );
105 106
106 int m_power_timer; 107 int m_power_timer;
107 108
108 OLedState m_leds [2]; 109 OLedState m_leds [2];
109}; 110};
@@ -111,79 +112,80 @@ protected:
111class Jornada : public ODevice { 112class Jornada : public ODevice {
112protected: 113protected:
113 virtual void init ( ); 114 virtual void init ( );
114 //virtual void initButtons ( ); 115 //virtual void initButtons ( );
115public: 116public:
116 virtual bool setSoftSuspend ( bool soft ); 117 virtual bool setSoftSuspend ( bool soft );
117 virtual bool setDisplayBrightness ( int b ); 118 virtual bool setDisplayBrightness ( int b );
118 virtual int displayBrightnessResolution ( ) const; 119 virtual int displayBrightnessResolution ( ) const;
119 static bool isJornada(); 120 static bool isJornada();
120 121
121}; 122};
122 123
123class Zaurus : public ODevice { 124class Zaurus : public ODevice {
124protected: 125protected:
125 virtual void init ( ); 126 virtual void init ( );
126 virtual void initButtons ( ); 127 virtual void initButtons ( );
127 128
128public: 129public:
129 virtual bool setSoftSuspend ( bool soft ); 130 virtual bool setSoftSuspend ( bool soft );
130 131
131 virtual bool setDisplayBrightness ( int b ); 132 virtual bool setDisplayBrightness ( int b );
132 virtual int displayBrightnessResolution ( ) const; 133 virtual int displayBrightnessResolution ( ) const;
133 134
134 virtual void alarmSound ( ); 135 virtual void alarmSound ( );
135 virtual void keySound ( ); 136 virtual void keySound ( );
136 virtual void touchSound ( ); 137 virtual void touchSound ( );
137 138
138 virtual QValueList <OLed> ledList ( ) const; 139 virtual QValueList <OLed> ledList ( ) const;
139 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 140 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
140 virtual OLedState ledState ( OLed led ) const; 141 virtual OLedState ledState ( OLed led ) const;
141 virtual bool setLedState ( OLed led, OLedState st ); 142 virtual bool setLedState ( OLed led, OLedState st );
142 143
143 virtual bool hasHingeSensor() const; 144 bool hasHingeSensor() const;
144 virtual OHingeStatus readHingeSensor(); 145 OHingeStatus readHingeSensor();
145 146
146 static bool isZaurus(); 147 static bool isZaurus();
147 148
148 // Does this break BC? 149 // Does this break BC?
149 virtual bool suspend ( ); 150 virtual bool suspend ( );
150 virtual Transformation rotation ( ) const; 151 Transformation rotation ( ) const;
151 virtual ODirection direction ( ) const; 152 ODirection direction ( ) const;
152 153
153protected: 154protected:
154 virtual void buzzer ( int snd ); 155 virtual void buzzer ( int snd );
155 156
156 OLedState m_leds [1]; 157 OLedState m_leds [1];
157 bool m_embedix; 158 bool m_embedix;
159 void virtual_hook( int id, void *data );
158}; 160};
159 161
160class SIMpad : public ODevice, public QWSServer::KeyboardFilter { 162class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
161protected: 163protected:
162 virtual void init ( ); 164 virtual void init ( );
163 virtual void initButtons ( ); 165 virtual void initButtons ( );
164 166
165public: 167public:
166 virtual bool setSoftSuspend ( bool soft ); 168 virtual bool setSoftSuspend ( bool soft );
167 virtual bool suspend(); 169 virtual bool suspend();
168 170
169 virtual bool setDisplayStatus( bool on ); 171 virtual bool setDisplayStatus( bool on );
170 virtual bool setDisplayBrightness ( int b ); 172 virtual bool setDisplayBrightness ( int b );
171 virtual int displayBrightnessResolution ( ) const; 173 virtual int displayBrightnessResolution ( ) const;
172 174
173 virtual void alarmSound ( ); 175 virtual void alarmSound ( );
174 176
175 virtual QValueList <OLed> ledList ( ) const; 177 virtual QValueList <OLed> ledList ( ) const;
176 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 178 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
177 virtual OLedState ledState ( OLed led ) const; 179 virtual OLedState ledState ( OLed led ) const;
178 virtual bool setLedState ( OLed led, OLedState st ); 180 virtual bool setLedState ( OLed led, OLedState st );
179 181
180protected: 182protected:
181 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); 183 virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
182 virtual void timerEvent ( QTimerEvent *te ); 184 virtual void timerEvent ( QTimerEvent *te );
183 185
184 int m_power_timer; 186 int m_power_timer;
185 187
186 OLedState m_leds [1]; //FIXME check if really only one 188 OLedState m_leds [1]; //FIXME check if really only one
187}; 189};
188 190
189class Ramses : public ODevice, public QWSServer::KeyboardFilter { 191class Ramses : public ODevice, public QWSServer::KeyboardFilter {
@@ -415,65 +417,65 @@ struct yopy_button {
415} yopy_buttons [] = { 417} yopy_buttons [] = {
416 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"), 418 { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"),
417 "devicebuttons/yopy_action", 419 "devicebuttons/yopy_action",
418 "datebook", "nextView()", 420 "datebook", "nextView()",
419 "today", "raise()" }, 421 "today", "raise()" },
420 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"), 422 { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"),
421 "devicebuttons/yopy_ok", 423 "devicebuttons/yopy_ok",
422 "addressbook", "raise()", 424 "addressbook", "raise()",
423 "addressbook", "beamBusinessCard()" }, 425 "addressbook", "beamBusinessCard()" },
424 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"), 426 { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"),
425 "devicebuttons/yopy_end", 427 "devicebuttons/yopy_end",
426 "QPE/Launcher", "home()", 428 "QPE/Launcher", "home()",
427 "buttonsettings", "raise()" }, 429 "buttonsettings", "raise()" },
428}; 430};
429 431
430static QCString makeChannel ( const char *str ) 432static QCString makeChannel ( const char *str )
431{ 433{
432 if ( str && !::strchr ( str, '/' )) 434 if ( str && !::strchr ( str, '/' ))
433 return QCString ( "QPE/Application/" ) + str; 435 return QCString ( "QPE/Application/" ) + str;
434 else 436 else
435 return str; 437 return str;
436} 438}
437 439
438static inline bool isQWS() 440static inline bool isQWS()
439{ 441{
440 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false; 442 return qApp ? ( qApp-> type ( ) == QApplication::GuiServer ) : false;
441} 443}
442 444
443ODevice *ODevice::inst ( ) 445ODevice *ODevice::inst ( )
444{ 446{
445 static ODevice *dev = 0; 447 static ODevice *dev = 0;
446 448
447 if ( !dev ) { 449 if ( !dev ) {
448 if ( QFile::exists ( "/proc/hal/model" )) 450 if ( QFile::exists ( "/proc/hal/model" ))
449 dev = new iPAQ ( ); 451 dev = new iPAQ ( );
450 else if ( Zaurus::isZaurus() ) 452 else if ( Zaurus::isZaurus() )
451 dev = new Zaurus ( ); 453 dev = new Zaurus ( );
452 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" )) 454 else if ( QFile::exists ( "/proc/ucb1x00" ) && QFile::exists ( "/proc/cs3" ))
453 dev = new SIMpad ( ); 455 dev = new SIMpad ( );
454 else if ( QFile::exists ( "/proc/sys/board/name" )) 456 else if ( QFile::exists ( "/proc/sys/board/name" ))
455 dev = new Ramses ( ); 457 dev = new Ramses ( );
456 else if ( Yopy::isYopy() ) 458 else if ( Yopy::isYopy() )
457 dev = new Yopy ( ); 459 dev = new Yopy ( );
458 else if ( Jornada::isJornada() ) 460 else if ( Jornada::isJornada() )
459 dev = new Jornada ( ); 461 dev = new Jornada ( );
460 else 462 else
461 dev = new ODevice ( ); 463 dev = new ODevice ( );
462 dev-> init ( ); 464 dev-> init ( );
463 } 465 }
464 return dev; 466 return dev;
465} 467}
466 468
467 469
468/************************************************** 470/**************************************************
469 * 471 *
470 * common 472 * common
471 * 473 *
472 **************************************************/ 474 **************************************************/
473 475
474 476
475ODevice::ODevice ( ) 477ODevice::ODevice ( )
476{ 478{
477 d = new ODeviceData; 479 d = new ODeviceData;
478 480
479 d-> m_modelstr = "Unknown"; 481 d-> m_modelstr = "Unknown";
@@ -699,73 +701,79 @@ OModel ODevice::model ( ) const
699 return d-> m_model; 701 return d-> m_model;
700} 702}
701 703
702/** 704/**
703 * This does return the systen name 705 * This does return the systen name
704 */ 706 */
705QString ODevice::systemString ( ) const 707QString ODevice::systemString ( ) const
706{ 708{
707 return d-> m_systemstr; 709 return d-> m_systemstr;
708} 710}
709 711
710/** 712/**
711 * Return System as OSystem value 713 * Return System as OSystem value
712 */ 714 */
713OSystem ODevice::system ( ) const 715OSystem ODevice::system ( ) const
714{ 716{
715 return d-> m_system; 717 return d-> m_system;
716} 718}
717 719
718/** 720/**
719 * @return the version string of the base system 721 * @return the version string of the base system
720 */ 722 */
721QString ODevice::systemVersionString ( ) const 723QString ODevice::systemVersionString ( ) const
722{ 724{
723 return d-> m_sysverstr; 725 return d-> m_sysverstr;
724} 726}
725 727
726/** 728/**
727 * @return the current Transformation 729 * @return the current Transformation
728 */ 730 */
729Transformation ODevice::rotation ( ) const 731Transformation ODevice::rotation ( ) const
730{ 732{
731 return d-> m_rotation; 733 VirtRotation rot;
734 ODevice* that =(ODevice* )this;
735 that->virtual_hook( VIRTUAL_ROTATION, &rot );
736 return rot.trans;
732} 737}
733 738
734/** 739/**
735 * @return the current rotation direction 740 * @return the current rotation direction
736 */ 741 */
737ODirection ODevice::direction ( ) const 742ODirection ODevice::direction ( ) const
738{ 743{
739 return d-> m_direction; 744 VirtDirection dir;
745 ODevice* that =(ODevice* )this;
746 that->virtual_hook( VIRTUAL_DIRECTION, &dir );
747 return dir.direct;
740} 748}
741 749
742/** 750/**
743 * This plays an alarmSound 751 * This plays an alarmSound
744 */ 752 */
745void ODevice::alarmSound ( ) 753void ODevice::alarmSound ( )
746{ 754{
747#ifndef QT_NO_SOUND 755#ifndef QT_NO_SOUND
748 static Sound snd ( "alarm" ); 756 static Sound snd ( "alarm" );
749 757
750 if ( snd. isFinished ( )) 758 if ( snd. isFinished ( ))
751 snd. play ( ); 759 snd. play ( );
752#endif 760#endif
753} 761}
754 762
755/** 763/**
756 * This plays a key sound 764 * This plays a key sound
757 */ 765 */
758void ODevice::keySound ( ) 766void ODevice::keySound ( )
759{ 767{
760#ifndef QT_NO_SOUND 768#ifndef QT_NO_SOUND
761 static Sound snd ( "keysound" ); 769 static Sound snd ( "keysound" );
762 770
763 if ( snd. isFinished ( )) 771 if ( snd. isFinished ( ))
764 snd. play ( ); 772 snd. play ( );
765#endif 773#endif
766} 774}
767 775
768/** 776/**
769 * This plays a touch sound 777 * This plays a touch sound
770 */ 778 */
771void ODevice::touchSound ( ) 779void ODevice::touchSound ( )
@@ -817,73 +825,78 @@ bool ODevice::setLedState ( OLed which, OLedState st )
817 return false; 825 return false;
818} 826}
819 827
820/** 828/**
821 * @return if the device has a light sensor 829 * @return if the device has a light sensor
822 */ 830 */
823bool ODevice::hasLightSensor ( ) const 831bool ODevice::hasLightSensor ( ) const
824{ 832{
825 return false; 833 return false;
826} 834}
827 835
828/** 836/**
829 * @return a value from the light sensor 837 * @return a value from the light sensor
830 */ 838 */
831int ODevice::readLightSensor ( ) 839int ODevice::readLightSensor ( )
832{ 840{
833 return -1; 841 return -1;
834} 842}
835 843
836/** 844/**
837 * @return the light sensor resolution 845 * @return the light sensor resolution
838 */ 846 */
839int ODevice::lightSensorResolution ( ) const 847int ODevice::lightSensorResolution ( ) const
840{ 848{
841 return 0; 849 return 0;
842} 850}
843 851
844/** 852/**
845 * @return if the device has a hinge sensor 853 * @return if the device has a hinge sensor
846 */ 854 */
847bool ODevice::hasHingeSensor ( ) const 855bool ODevice::hasHingeSensor ( ) const
848{ 856{
849 return false; 857 VirtHasHinge hing;
858 ODevice* that =(ODevice* )this;
859 that->virtual_hook( VIRTUAL_HAS_HINGE, &hing );
860 return hing.hasHinge;
850} 861}
851 862
852/** 863/**
853 * @return a value from the hinge sensor 864 * @return a value from the hinge sensor
854 */ 865 */
855OHingeStatus ODevice::readHingeSensor ( ) 866OHingeStatus ODevice::readHingeSensor ( )
856{ 867{
857 return CASE_UNKNOWN; 868 VirtHingeStatus hing;
869 virtual_hook( VIRTUAL_HINGE, &hing );
870 return hing.hingeStat;
858} 871}
859 872
860/** 873/**
861 * @return a list with CPU frequencies supported by the hardware 874 * @return a list with CPU frequencies supported by the hardware
862 */ 875 */
863const QStrList &ODevice::allowedCpuFrequencies ( ) const 876const QStrList &ODevice::allowedCpuFrequencies ( ) const
864{ 877{
865 return *d->m_cpu_frequencies; 878 return *d->m_cpu_frequencies;
866} 879}
867 880
868 881
869/** 882/**
870 * Set desired CPU frequency 883 * Set desired CPU frequency
871 * 884 *
872 * @param index index into d->m_cpu_frequencies of the frequency to be set 885 * @param index index into d->m_cpu_frequencies of the frequency to be set
873 */ 886 */
874bool ODevice::setCurrentCpuFrequency(uint index) 887bool ODevice::setCurrentCpuFrequency(uint index)
875{ 888{
876 if (index >= d->m_cpu_frequencies->count()) 889 if (index >= d->m_cpu_frequencies->count())
877 return false; 890 return false;
878 891
879 char *freq = d->m_cpu_frequencies->at(index); 892 char *freq = d->m_cpu_frequencies->at(index);
880 qWarning("set freq to %s", freq); 893 qWarning("set freq to %s", freq);
881 894
882 int fd; 895 int fd;
883 896
884 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) { 897 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) {
885 char writeCommand[50]; 898 char writeCommand[50];
886 const int count = sprintf(writeCommand, "%s\n", freq); 899 const int count = sprintf(writeCommand, "%s\n", freq);
887 int res = (::write(fd, writeCommand, count) != -1); 900 int res = (::write(fd, writeCommand, count) != -1);
888 ::close(fd); 901 ::close(fd);
889 return res; 902 return res;
@@ -974,148 +987,169 @@ void ODevice::remapPressedAction ( int button, const OQCopMessage &action )
974 987
975 mb_chan=b. pressedAction ( ). channel ( ); 988 mb_chan=b. pressedAction ( ). channel ( );
976 989
977 Config buttonFile ( "ButtonSettings" ); 990 Config buttonFile ( "ButtonSettings" );
978 buttonFile. setGroup ( "Button" + QString::number ( button )); 991 buttonFile. setGroup ( "Button" + QString::number ( button ));
979 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan); 992 buttonFile. writeEntry ( "PressedActionChannel", (const char*) mb_chan);
980 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( )); 993 buttonFile. writeEntry ( "PressedActionMessage", (const char*) b. pressedAction ( ). message ( ));
981 994
982 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( ))); 995 //buttonFile. writeEntry ( "PressedActionArgs", encodeBase64 ( b. pressedAction ( ). data ( )));
983 996
984 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 997 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
985} 998}
986 999
987void ODevice::remapHeldAction ( int button, const OQCopMessage &action ) 1000void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
988{ 1001{
989 initButtons ( ); 1002 initButtons ( );
990 1003
991 if ( button >= (int) d-> m_buttons-> count ( )) 1004 if ( button >= (int) d-> m_buttons-> count ( ))
992 return; 1005 return;
993 1006
994 ODeviceButton &b = ( *d-> m_buttons ) [button]; 1007 ODeviceButton &b = ( *d-> m_buttons ) [button];
995 b. setHeldAction ( action ); 1008 b. setHeldAction ( action );
996 1009
997 Config buttonFile ( "ButtonSettings" ); 1010 Config buttonFile ( "ButtonSettings" );
998 buttonFile. setGroup ( "Button" + QString::number ( button )); 1011 buttonFile. setGroup ( "Button" + QString::number ( button ));
999 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( )); 1012 buttonFile. writeEntry ( "HeldActionChannel", (const char *) b. heldAction ( ). channel ( ));
1000 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( )); 1013 buttonFile. writeEntry ( "HeldActionMessage", (const char *) b. heldAction ( ). message ( ));
1001 1014
1002 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( ))); 1015 //buttonFile. writeEntry ( "HeldActionArgs", decodeBase64 ( b. heldAction ( ). data ( )));
1003 1016
1004 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" ); 1017 QCopEnvelope ( "QPE/System", "deviceButtonMappingChanged()" );
1005} 1018}
1006void ODevice::virtual_hook(int, void* ){ 1019void ODevice::virtual_hook(int id, void* data){
1007 1020 switch( id ) {
1021 case VIRTUAL_ROTATION:{
1022 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
1023 rot->trans = d->m_rotation;
1024 break;
1025 }
1026 case VIRTUAL_DIRECTION:{
1027 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
1028 dir->direct = d->m_direction;
1029 break;
1030 }
1031 case VIRTUAL_HAS_HINGE:{
1032 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
1033 hin->hasHinge = false;
1034 break;
1035 }
1036 case VIRTUAL_HINGE:{
1037 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
1038 hin->hingeStat = CASE_UNKNOWN;
1039 break;
1040 }
1041 }
1008} 1042}
1009 1043
1010/************************************************** 1044/**************************************************
1011 * 1045 *
1012 * Yopy 3500/3700 1046 * Yopy 3500/3700
1013 * 1047 *
1014 **************************************************/ 1048 **************************************************/
1015 1049
1016bool Yopy::isYopy ( ) 1050bool Yopy::isYopy ( )
1017{ 1051{
1018 QFile f( "/proc/cpuinfo" ); 1052 QFile f( "/proc/cpuinfo" );
1019 if ( f. open ( IO_ReadOnly ) ) { 1053 if ( f. open ( IO_ReadOnly ) ) {
1020 QTextStream ts ( &f ); 1054 QTextStream ts ( &f );
1021 QString line; 1055 QString line;
1022 while( line = ts. readLine ( ) ) { 1056 while( line = ts. readLine ( ) ) {
1023 if ( line. left ( 8 ) == "Hardware" ) { 1057 if ( line. left ( 8 ) == "Hardware" ) {
1024 int loc = line. find ( ":" ); 1058 int loc = line. find ( ":" );
1025 if ( loc != -1 ) { 1059 if ( loc != -1 ) {
1026 QString model = 1060 QString model =
1027 line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1061 line. mid ( loc + 2 ). simplifyWhiteSpace( );
1028 return ( model == "Yopy" ); 1062 return ( model == "Yopy" );
1029 } 1063 }
1030 } 1064 }
1031 } 1065 }
1032 } 1066 }
1033 return false; 1067 return false;
1034} 1068}
1035 1069
1036void Yopy::init ( ) 1070void Yopy::init ( )
1037{ 1071{
1038 d-> m_vendorstr = "G.Mate"; 1072 d-> m_vendorstr = "G.Mate";
1039 d-> m_vendor = Vendor_GMate; 1073 d-> m_vendor = Vendor_GMate;
1040 d-> m_modelstr = "Yopy3700"; 1074 d-> m_modelstr = "Yopy3700";
1041 d-> m_model = Model_Yopy_3700; 1075 d-> m_model = Model_Yopy_3700;
1042 d-> m_rotation = Rot0; 1076 d-> m_rotation = Rot0;
1043 1077
1044 d-> m_systemstr = "Linupy"; 1078 d-> m_systemstr = "Linupy";
1045 d-> m_system = System_Linupy; 1079 d-> m_system = System_Linupy;
1046 1080
1047 QFile f ( "/etc/issue" ); 1081 QFile f ( "/etc/issue" );
1048 if ( f. open ( IO_ReadOnly )) { 1082 if ( f. open ( IO_ReadOnly )) {
1049 QTextStream ts ( &f ); 1083 QTextStream ts ( &f );
1050 ts.readLine(); 1084 ts.readLine();
1051 d-> m_sysverstr = ts. readLine ( ); 1085 d-> m_sysverstr = ts. readLine ( );
1052 f. close ( ); 1086 f. close ( );
1053 } 1087 }
1054} 1088}
1055 1089
1056void Yopy::initButtons ( ) 1090void Yopy::initButtons ( )
1057{ 1091{
1058 if ( d-> m_buttons ) 1092 if ( d-> m_buttons )
1059 return; 1093 return;
1060 1094
1061 d-> m_buttons = new QValueList <ODeviceButton>; 1095 d-> m_buttons = new QValueList <ODeviceButton>;
1062 1096
1063 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) { 1097 for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) {
1064 1098
1065 yopy_button *ib = yopy_buttons + i; 1099 yopy_button *ib = yopy_buttons + i;
1066 1100
1067 ODeviceButton b; 1101 ODeviceButton b;
1068 1102
1069 b. setKeycode ( ib-> code ); 1103 b. setKeycode ( ib-> code );
1070 b. setUserText ( QObject::tr ( "Button", ib-> utext )); 1104 b. setUserText ( QObject::tr ( "Button", ib-> utext ));
1071 b. setPixmap ( Resource::loadPixmap ( ib-> pix )); 1105 b. setPixmap ( Resource::loadPixmap ( ib-> pix ));
1072 b. setFactoryPresetPressedAction 1106 b. setFactoryPresetPressedAction
1073 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction)); 1107 (OQCopMessage(makeChannel(ib->fpressedservice), ib->fpressedaction));
1074 b. setFactoryPresetHeldAction 1108 b. setFactoryPresetHeldAction
1075 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction)); 1109 (OQCopMessage(makeChannel(ib->fheldservice), ib->fheldaction));
1076 1110
1077 d-> m_buttons-> append ( b ); 1111 d-> m_buttons-> append ( b );
1078 } 1112 }
1079 reloadButtonMapping ( ); 1113 reloadButtonMapping ( );
1080 1114
1081 QCopChannel *sysch = new QCopChannel("QPE/System", this); 1115 QCopChannel *sysch = new QCopChannel("QPE/System", this);
1082 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), 1116 connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )),
1083 this, SLOT(systemMessage(const QCString &, const QByteArray & ))); 1117 this, SLOT(systemMessage(const QCString &, const QByteArray & )));
1084} 1118}
1085 1119
1086bool Yopy::suspend() 1120bool Yopy::suspend()
1087{ 1121{
1088 /* Opie for Yopy does not implement its own power management at the 1122 /* Opie for Yopy does not implement its own power management at the
1089 moment. The public version runs parallel to X, and relies on the 1123 moment. The public version runs parallel to X, and relies on the
1090 existing power management features. */ 1124 existing power management features. */
1091 return false; 1125 return false;
1092} 1126}
1093 1127
1094bool Yopy::setDisplayBrightness(int bright) 1128bool Yopy::setDisplayBrightness(int bright)
1095{ 1129{
1096 /* The code here works, but is disabled as the current version runs 1130 /* The code here works, but is disabled as the current version runs
1097 parallel to X, and relies on the existing backlight demon. */ 1131 parallel to X, and relies on the existing backlight demon. */
1098#if 0 1132#if 0
1099 if ( QFile::exists("/proc/sys/pm/light") ) { 1133 if ( QFile::exists("/proc/sys/pm/light") ) {
1100 int fd = ::open("/proc/sys/pm/light", O_WRONLY); 1134 int fd = ::open("/proc/sys/pm/light", O_WRONLY);
1101 if (fd >= 0 ) { 1135 if (fd >= 0 ) {
1102 if (bright) 1136 if (bright)
1103 ::write(fd, "1\n", 2); 1137 ::write(fd, "1\n", 2);
1104 else 1138 else
1105 ::write(fd, "0\n", 2); 1139 ::write(fd, "0\n", 2);
1106 ::close(fd); 1140 ::close(fd);
1107 return true; 1141 return true;
1108 } 1142 }
1109 } 1143 }
1110#endif 1144#endif
1111 return false; 1145 return false;
1112} 1146}
1113 1147
1114int Yopy::displayBrightnessResolution() const 1148int Yopy::displayBrightnessResolution() const
1115{ 1149{
1116 return 2; 1150 return 2;
1117} 1151}
1118 1152
1119/************************************************** 1153/**************************************************
1120 * 1154 *
1121 * iPAQ 1155 * iPAQ
@@ -1514,65 +1548,65 @@ int iPAQ::readLightSensor ( )
1514 1548
1515int iPAQ::lightSensorResolution ( ) const 1549int iPAQ::lightSensorResolution ( ) const
1516{ 1550{
1517 return 256; 1551 return 256;
1518} 1552}
1519 1553
1520/************************************************** 1554/**************************************************
1521 * 1555 *
1522 * Zaurus 1556 * Zaurus
1523 * 1557 *
1524 **************************************************/ 1558 **************************************************/
1525 1559
1526// Check whether this device is the sharp zaurus.. 1560// Check whether this device is the sharp zaurus..
1527// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus 1561// FIXME This gets unnecessary complicated. We should think about splitting the Zaurus
1528// class up into individual classes. We need three classes 1562// class up into individual classes. We need three classes
1529// 1563//
1530// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000) 1564// Zaurus-Collie (SA-model w/ 320x240 lcd, for SL5500 and SL5000)
1531// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600) 1565// Zaurus-Poodle (PXA-model w/ 320x240 lcd, for SL5600)
1532// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860) 1566// Zaurus-Corgi (PXA-model w/ 640x480 lcd, for C700, C750, C760, and C860)
1533// 1567//
1534// Only question right now is: Do we really need to do it? Because as soon 1568// Only question right now is: Do we really need to do it? Because as soon
1535// as the OpenZaurus kernel is ready, there will be a unified interface for all 1569// as the OpenZaurus kernel is ready, there will be a unified interface for all
1536// Zaurus models (concerning apm, backlight, buttons, etc.) 1570// Zaurus models (concerning apm, backlight, buttons, etc.)
1537// 1571//
1538// Comments? - mickeyl. 1572// Comments? - mickeyl.
1539 1573
1540bool Zaurus::isZaurus() 1574bool Zaurus::isZaurus()
1541{ 1575{
1542 1576
1543 // If the special devices by embedix exist, it is quite simple: it is a Zaurus ! 1577 // If the special devices by embedix exist, it is quite simple: it is a Zaurus !
1544 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){ 1578 if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ) ){
1545 return true; 1579 return true;
1546 } 1580 }
1547 1581
1548 // On non-embedix kernels, we have to look closer. 1582 // On non-embedix kernels, we have to look closer.
1549 bool is_zaurus = false; 1583 bool is_zaurus = false;
1550 QFile f ( "/proc/cpuinfo" ); 1584 QFile f ( "/proc/cpuinfo" );
1551 if ( f. open ( IO_ReadOnly ) ) { 1585 if ( f. open ( IO_ReadOnly ) ) {
1552 QString model; 1586 QString model;
1553 QFile f ( "/proc/cpuinfo" ); 1587 QFile f ( "/proc/cpuinfo" );
1554 1588
1555 QTextStream ts ( &f ); 1589 QTextStream ts ( &f );
1556 QString line; 1590 QString line;
1557 while( line = ts. readLine ( ) ) { 1591 while( line = ts. readLine ( ) ) {
1558 if ( line. left ( 8 ) == "Hardware" ) 1592 if ( line. left ( 8 ) == "Hardware" )
1559 break; 1593 break;
1560 } 1594 }
1561 int loc = line. find ( ":" ); 1595 int loc = line. find ( ":" );
1562 if ( loc != -1 ) 1596 if ( loc != -1 )
1563 model = line. mid ( loc + 2 ). simplifyWhiteSpace( ); 1597 model = line. mid ( loc + 2 ). simplifyWhiteSpace( );
1564 1598
1565 if ( model == "Sharp-Collie" 1599 if ( model == "Sharp-Collie"
1566 || model == "Collie" 1600 || model == "Collie"
1567 || model == "SHARP Corgi" 1601 || model == "SHARP Corgi"
1568 || model == "SHARP Shepherd" 1602 || model == "SHARP Shepherd"
1569 || model == "SHARP Poodle" 1603 || model == "SHARP Poodle"
1570 || model == "SHARP Husky" 1604 || model == "SHARP Husky"
1571 ) 1605 )
1572 is_zaurus = true; 1606 is_zaurus = true;
1573 1607
1574 } 1608 }
1575 return is_zaurus; 1609 return is_zaurus;
1576} 1610}
1577 1611
1578 1612
@@ -1792,100 +1826,100 @@ void Zaurus::buzzer ( int sound )
1792#ifndef QT_NO_SOUND 1826#ifndef QT_NO_SOUND
1793 QString soundname; 1827 QString soundname;
1794 1828
1795 // Not all devices have real sound 1829 // Not all devices have real sound
1796 if ( d->m_model == Model_Zaurus_SLC7x0 1830 if ( d->m_model == Model_Zaurus_SLC7x0
1797 || d->m_model == Model_Zaurus_SLB600 ){ 1831 || d->m_model == Model_Zaurus_SLB600 ){
1798 1832
1799 switch ( sound ){ 1833 switch ( sound ){
1800 case SHARP_BUZ_SCHEDULE_ALARM: 1834 case SHARP_BUZ_SCHEDULE_ALARM:
1801 soundname = "alarm"; 1835 soundname = "alarm";
1802 break; 1836 break;
1803 case SHARP_BUZ_TOUCHSOUND: 1837 case SHARP_BUZ_TOUCHSOUND:
1804 soundname = "touchsound"; 1838 soundname = "touchsound";
1805 break; 1839 break;
1806 case SHARP_BUZ_KEYSOUND: 1840 case SHARP_BUZ_KEYSOUND:
1807 soundname = "keysound"; 1841 soundname = "keysound";
1808 break; 1842 break;
1809 default: 1843 default:
1810 soundname = "alarm"; 1844 soundname = "alarm";
1811 1845
1812 } 1846 }
1813 } 1847 }
1814 1848
1815 // If a soundname is defined, we expect that this device has 1849 // If a soundname is defined, we expect that this device has
1816 // sound capabilities.. Otherwise we expect to have the buzzer 1850 // sound capabilities.. Otherwise we expect to have the buzzer
1817 // device.. 1851 // device..
1818 if ( !soundname.isEmpty() ){ 1852 if ( !soundname.isEmpty() ){
1819 int fd; 1853 int fd;
1820 int vol; 1854 int vol;
1821 bool vol_reset = false; 1855 bool vol_reset = false;
1822 1856
1823 Sound snd ( soundname ); 1857 Sound snd ( soundname );
1824 1858
1825 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) { 1859 if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
1826 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) { 1860 if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
1827 Config cfg ( "qpe" ); 1861 Config cfg ( "qpe" );
1828 cfg. setGroup ( "Volume" ); 1862 cfg. setGroup ( "Volume" );
1829 1863
1830 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 ); 1864 int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
1831 if ( volalarm < 0 ) 1865 if ( volalarm < 0 )
1832 volalarm = 0; 1866 volalarm = 0;
1833 else if ( volalarm > 100 ) 1867 else if ( volalarm > 100 )
1834 volalarm = 100; 1868 volalarm = 100;
1835 volalarm |= ( volalarm << 8 ); 1869 volalarm |= ( volalarm << 8 );
1836 1870
1837 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) 1871 if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
1838 vol_reset = true; 1872 vol_reset = true;
1839 } 1873 }
1840 } 1874 }
1841 1875
1842 snd. play ( ); 1876 snd. play ( );
1843 while ( !snd. isFinished ( )) 1877 while ( !snd. isFinished ( ))
1844 qApp-> processEvents ( ); 1878 qApp-> processEvents ( );
1845 1879
1846 if ( fd >= 0 ) { 1880 if ( fd >= 0 ) {
1847 if ( vol_reset ) 1881 if ( vol_reset )
1848 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); 1882 ::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
1849 ::close ( fd ); 1883 ::close ( fd );
1850 } 1884 }
1851 } else { 1885 } else {
1852 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK ); 1886 int fd = ::open ( "/dev/sharp_buz", O_WRONLY|O_NONBLOCK );
1853 1887
1854 if ( fd >= 0 ) { 1888 if ( fd >= 0 ) {
1855 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound ); 1889 ::ioctl ( fd, SHARP_BUZZER_MAKESOUND, sound );
1856 ::close ( fd ); 1890 ::close ( fd );
1857 } 1891 }
1858 1892
1859 } 1893 }
1860#endif 1894#endif
1861} 1895}
1862 1896
1863 1897
1864void Zaurus::alarmSound ( ) 1898void Zaurus::alarmSound ( )
1865{ 1899{
1866 buzzer ( SHARP_BUZ_SCHEDULE_ALARM ); 1900 buzzer ( SHARP_BUZ_SCHEDULE_ALARM );
1867} 1901}
1868 1902
1869void Zaurus::touchSound ( ) 1903void Zaurus::touchSound ( )
1870{ 1904{
1871 buzzer ( SHARP_BUZ_TOUCHSOUND ); 1905 buzzer ( SHARP_BUZ_TOUCHSOUND );
1872} 1906}
1873 1907
1874void Zaurus::keySound ( ) 1908void Zaurus::keySound ( )
1875{ 1909{
1876 buzzer ( SHARP_BUZ_KEYSOUND ); 1910 buzzer ( SHARP_BUZ_KEYSOUND );
1877} 1911}
1878 1912
1879 1913
1880QValueList <OLed> Zaurus::ledList ( ) const 1914QValueList <OLed> Zaurus::ledList ( ) const
1881{ 1915{
1882 QValueList <OLed> vl; 1916 QValueList <OLed> vl;
1883 vl << Led_Mail; 1917 vl << Led_Mail;
1884 return vl; 1918 return vl;
1885} 1919}
1886 1920
1887QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const 1921QValueList <OLedState> Zaurus::ledStateList ( OLed l ) const
1888{ 1922{
1889 QValueList <OLedState> vl; 1923 QValueList <OLedState> vl;
1890 1924
1891 if ( l == Led_Mail ) 1925 if ( l == Led_Mail )
@@ -2037,67 +2071,67 @@ bool Zaurus::suspend ( )
2037 2071
2038 // This is needed because the iPAQ apm implementation is asynchronous and we 2072 // This is needed because the iPAQ apm implementation is asynchronous and we
2039 // can not be sure when exactly the device is really suspended 2073 // can not be sure when exactly the device is really suspended
2040 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists. 2074 // This can be deleted as soon as a stable familiar with a synchronous apm implementation exists.
2041 2075
2042 if ( res ) { 2076 if ( res ) {
2043 do { // Yes, wait 15 seconds. This APM bug sucks big time. 2077 do { // Yes, wait 15 seconds. This APM bug sucks big time.
2044 ::usleep ( 200 * 1000 ); 2078 ::usleep ( 200 * 1000 );
2045 ::gettimeofday ( &tvn, 0 ); 2079 ::gettimeofday ( &tvn, 0 );
2046 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 ); 2080 } while ((( tvn. tv_sec - tvs. tv_sec ) * 1000 + ( tvn. tv_usec - tvs. tv_usec ) / 1000 ) < 15000 );
2047 } 2081 }
2048 2082
2049 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" ); 2083 QCopEnvelope ( "QPE/Rotation", "rotateDefault()" );
2050 return res; 2084 return res;
2051} 2085}
2052 2086
2053 2087
2054Transformation Zaurus::rotation ( ) const 2088Transformation Zaurus::rotation ( ) const
2055{ 2089{
2056 Transformation rot; 2090 Transformation rot;
2057 int handle = 0; 2091 int handle = 0;
2058 int retval = 0; 2092 int retval = 0;
2059 2093
2060 switch ( d-> m_model ) { 2094 switch ( d-> m_model ) {
2061 case Model_Zaurus_SLC7x0: 2095 case Model_Zaurus_SLC7x0:
2062 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2096 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2063 if (handle == -1) { 2097 if (handle == -1) {
2064 return Rot270; 2098 return Rot270;
2065 } else { 2099 } else {
2066 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2100 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2067 ::close (handle); 2101 ::close (handle);
2068 2102
2069 if (retval == 2 ) 2103 if (retval == 2 )
2070 rot = Rot0; 2104 rot = Rot0;
2071 else 2105 else
2072 rot = Rot270; 2106 rot = Rot270;
2073 } 2107 }
2074 break; 2108 break;
2075 case Model_Zaurus_SLA300: 2109 case Model_Zaurus_SLA300:
2076 case Model_Zaurus_SLB600: 2110 case Model_Zaurus_SLB600:
2077 case Model_Zaurus_SL5500: 2111 case Model_Zaurus_SL5500:
2078 case Model_Zaurus_SL5000: 2112 case Model_Zaurus_SL5000:
2079 default: 2113 default:
2080 rot = d-> m_rotation; 2114 rot = d-> m_rotation;
2081 break; 2115 break;
2082 } 2116 }
2083 2117
2084 return rot; 2118 return rot;
2085} 2119}
2086ODirection Zaurus::direction ( ) const 2120ODirection Zaurus::direction ( ) const
2087{ 2121{
2088 ODirection dir; 2122 ODirection dir;
2089 int handle = 0; 2123 int handle = 0;
2090 int retval = 0; 2124 int retval = 0;
2091 switch ( d-> m_model ) { 2125 switch ( d-> m_model ) {
2092 case Model_Zaurus_SLC7x0: 2126 case Model_Zaurus_SLC7x0:
2093 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2127 handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2094 if (handle == -1) { 2128 if (handle == -1) {
2095 dir = CW; 2129 dir = CW;
2096 } else { 2130 } else {
2097 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2131 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2098 ::close (handle); 2132 ::close (handle);
2099 if (retval == 2 ) 2133 if (retval == 2 )
2100 dir = CCW; 2134 dir = CCW;
2101 else 2135 else
2102 dir = CW; 2136 dir = CW;
2103 } 2137 }
@@ -2124,64 +2158,92 @@ int Zaurus::displayBrightnessResolution ( ) const
2124 2158
2125bool Zaurus::hasHingeSensor() const 2159bool Zaurus::hasHingeSensor() const
2126{ 2160{
2127 return d->m_model == Model_Zaurus_SLC7x0; 2161 return d->m_model == Model_Zaurus_SLC7x0;
2128} 2162}
2129 2163
2130OHingeStatus Zaurus::readHingeSensor() 2164OHingeStatus Zaurus::readHingeSensor()
2131{ 2165{
2132 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK); 2166 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2133 if (handle == -1) 2167 if (handle == -1)
2134 { 2168 {
2135 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror 2169 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
2136 return CASE_UNKNOWN; 2170 return CASE_UNKNOWN;
2137 } 2171 }
2138 else 2172 else
2139 { 2173 {
2140 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2174 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2141 ::close (handle); 2175 ::close (handle);
2142 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE ) 2176 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
2143 { 2177 {
2144 qDebug( "Zaurus::readHingeSensor() - result = %d", retval ); 2178 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
2145 return static_cast<OHingeStatus>( retval ); 2179 return static_cast<OHingeStatus>( retval );
2146 } 2180 }
2147 else 2181 else
2148 { 2182 {
2149 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" ); 2183 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
2150 return CASE_UNKNOWN; 2184 return CASE_UNKNOWN;
2151 } 2185 }
2152 } 2186 }
2153} 2187}
2154 2188
2155 2189
2190void Zaurus::virtual_hook( int id, void *data ) {
2191 switch( id ) {
2192 case VIRTUAL_ROTATION:{
2193 VirtRotation* rot = reinterpret_cast<VirtRotation*>( data );
2194 rot->trans = rotation();
2195 break;
2196 }
2197 case VIRTUAL_DIRECTION:{
2198 VirtDirection *dir = reinterpret_cast<VirtDirection*>( data );
2199 dir->direct = direction();
2200 break;
2201 }
2202 case VIRTUAL_HAS_HINGE:{
2203 VirtHasHinge *hin = reinterpret_cast<VirtHasHinge*>( data );
2204 hin->hasHinge = hasHingeSensor();
2205 break;
2206 }
2207 case VIRTUAL_HINGE:{
2208 VirtHingeStatus *hin = reinterpret_cast<VirtHingeStatus*>( data );
2209 hin->hingeStat = readHingeSensor();
2210 break;
2211 }
2212 default:
2213 ODevice::virtual_hook( id, data );
2214 break;
2215 }
2216}
2217
2156/************************************************** 2218/**************************************************
2157 * 2219 *
2158 * SIMpad 2220 * SIMpad
2159 * 2221 *
2160 **************************************************/ 2222 **************************************************/
2161 2223
2162void SIMpad::init ( ) 2224void SIMpad::init ( )
2163{ 2225{
2164 d-> m_vendorstr = "SIEMENS"; 2226 d-> m_vendorstr = "SIEMENS";
2165 d-> m_vendor = Vendor_SIEMENS; 2227 d-> m_vendor = Vendor_SIEMENS;
2166 2228
2167 QFile f ( "/proc/hal/model" ); 2229 QFile f ( "/proc/hal/model" );
2168 2230
2169 //TODO Implement model checking 2231 //TODO Implement model checking
2170 //FIXME For now we assume an SL4 2232 //FIXME For now we assume an SL4
2171 2233
2172 d-> m_modelstr = "SL4"; 2234 d-> m_modelstr = "SL4";
2173 d-> m_model = Model_SIMpad_SL4; 2235 d-> m_model = Model_SIMpad_SL4;
2174 2236
2175 switch ( d-> m_model ) { 2237 switch ( d-> m_model ) {
2176 default: 2238 default:
2177 d-> m_rotation = Rot0; 2239 d-> m_rotation = Rot0;
2178 d-> m_direction = CCW; 2240 d-> m_direction = CCW;
2179 d-> m_holdtime = 1000; // 1000ms 2241 d-> m_holdtime = 1000; // 1000ms
2180 2242
2181 break; 2243 break;
2182 } 2244 }
2183 2245
2184 f. setName ( "/etc/familiar-version" ); 2246 f. setName ( "/etc/familiar-version" );
2185 if ( f. open ( IO_ReadOnly )) { 2247 if ( f. open ( IO_ReadOnly )) {
2186 d-> m_systemstr = "Familiar"; 2248 d-> m_systemstr = "Familiar";
2187 d-> m_system = System_Familiar; 2249 d-> m_system = System_Familiar;
diff --git a/libopie/odevice.h b/libopie/odevice.h
index 791d358..fc41079 100644
--- a/libopie/odevice.h
+++ b/libopie/odevice.h
@@ -165,122 +165,138 @@ class ODevice : public QObject {
165 165
166private: 166private:
167 /* disable copy */ 167 /* disable copy */
168 ODevice ( const ODevice & ); 168 ODevice ( const ODevice & );
169 169
170protected: 170protected:
171 ODevice ( ); 171 ODevice ( );
172 virtual void init ( ); 172 virtual void init ( );
173 virtual void initButtons ( ); 173 virtual void initButtons ( );
174 174
175 ODeviceData *d; 175 ODeviceData *d;
176 176
177public: 177public:
178 // sandman do we want to allow destructions? -zecke? 178 // sandman do we want to allow destructions? -zecke?
179 virtual ~ODevice ( ); 179 virtual ~ODevice ( );
180 180
181 static ODevice *inst ( ); 181 static ODevice *inst ( );
182 182
183 // information 183 // information
184 184
185 QString modelString ( ) const; 185 QString modelString ( ) const;
186 OModel model ( ) const; 186 OModel model ( ) const;
187 inline OModel series ( ) const { return (OModel) ( model ( ) & Model_Series_Mask ); } 187 inline OModel series ( ) const { return (OModel) ( model ( ) & Model_Series_Mask ); }
188 188
189 QString vendorString ( ) const; 189 QString vendorString ( ) const;
190 OVendor vendor ( ) const; 190 OVendor vendor ( ) const;
191 191
192 QString systemString ( ) const; 192 QString systemString ( ) const;
193 OSystem system ( ) const; 193 OSystem system ( ) const;
194 194
195 QString systemVersionString ( ) const; 195 QString systemVersionString ( ) const;
196 196
197 virtual Transformation rotation ( ) const; 197 /*virtual*/ Transformation rotation ( ) const;
198 virtual ODirection direction ( ) const; 198 /*virtual*/ ODirection direction ( ) const;
199 199
200// system 200// system
201 201
202 virtual bool setSoftSuspend ( bool on ); 202 virtual bool setSoftSuspend ( bool on );
203 virtual bool suspend ( ); 203 virtual bool suspend ( );
204 204
205 virtual bool setDisplayStatus ( bool on ); 205 virtual bool setDisplayStatus ( bool on );
206 virtual bool setDisplayBrightness ( int brightness ); 206 virtual bool setDisplayBrightness ( int brightness );
207 virtual int displayBrightnessResolution ( ) const; 207 virtual int displayBrightnessResolution ( ) const;
208 virtual bool setDisplayContrast ( int contrast ); 208 virtual bool setDisplayContrast ( int contrast );
209 virtual int displayContrastResolution ( ) const; 209 virtual int displayContrastResolution ( ) const;
210 210
211 // don't add new virtual methods, use this: 211 // don't add new virtual methods, use this:
212 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); }; 212 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); };
213 // and in your subclass do do overwrite 213 // and in your subclass do do overwrite
214 //protected virtual int virtual_hook(int, void *) 214 //protected virtual int virtual_hook(int, void *)
215 // which is defined below 215 // which is defined below
216 216
217 // input / output 217 // input / output
218 //FIXME playAlarmSound and al might be better -zecke 218 //FIXME playAlarmSound and al might be better -zecke
219 virtual void alarmSound ( ); 219 virtual void alarmSound ( );
220 virtual void keySound ( ); 220 virtual void keySound ( );
221 virtual void touchSound ( ); 221 virtual void touchSound ( );
222 222
223 virtual QValueList <OLed> ledList ( ) const; 223 virtual QValueList <OLed> ledList ( ) const;
224 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 224 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
225 virtual OLedState ledState ( OLed led ) const; 225 virtual OLedState ledState ( OLed led ) const;
226 virtual bool setLedState ( OLed led, OLedState st ); 226 virtual bool setLedState ( OLed led, OLedState st );
227 227
228 virtual bool hasLightSensor ( ) const; 228 virtual bool hasLightSensor ( ) const;
229 virtual int readLightSensor ( ); 229 virtual int readLightSensor ( );
230 virtual int lightSensorResolution ( ) const; 230 virtual int lightSensorResolution ( ) const;
231 231
232 virtual bool hasHingeSensor ( ) const; 232 /*virtual*/ bool hasHingeSensor ( ) const;
233 virtual OHingeStatus readHingeSensor ( ); 233 /*virtual*/ OHingeStatus readHingeSensor ( );
234 234
235 const QStrList &allowedCpuFrequencies() const; 235 const QStrList &allowedCpuFrequencies() const;
236 bool setCurrentCpuFrequency(uint index); 236 bool setCurrentCpuFrequency(uint index);
237 237
238 /** 238 /**
239 * Returns the available buttons on this device. The number and location 239 * Returns the available buttons on this device. The number and location
240 * of buttons will vary depending on the device. Button numbers will be assigned 240 * of buttons will vary depending on the device. Button numbers will be assigned
241 * by the device manufacturer and will be from most preferred button to least preffered 241 * by the device manufacturer and will be from most preferred button to least preffered
242 * button. Note that this list only contains "user mappable" buttons. 242 * button. Note that this list only contains "user mappable" buttons.
243 * 243 *
244 * @todo ### make const 244 * @todo ### make const
245 */ 245 */
246 const QValueList<ODeviceButton> &buttons ( ) /** /todo ### make const */; 246 const QValueList<ODeviceButton> &buttons ( ) /** /todo ### make const */;
247 247
248 /** 248 /**
249 * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it 249 * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it
250 * returns 0L 250 * returns 0L
251 */ 251 */
252 const ODeviceButton *buttonForKeycode ( ushort keyCode ); 252 const ODeviceButton *buttonForKeycode ( ushort keyCode );
253 253
254 /** 254 /**
255 * Reassigns the pressed action for \a button. To return to the factory 255 * Reassigns the pressed action for \a button. To return to the factory
256 * default pass an empty string as \a qcopMessage. 256 * default pass an empty string as \a qcopMessage.
257 */ 257 */
258 void remapPressedAction ( int button, const OQCopMessage &qcopMessage ); 258 void remapPressedAction ( int button, const OQCopMessage &qcopMessage );
259 259
260 /** 260 /**
261 * Reassigns the held action for \a button. To return to the factory 261 * Reassigns the held action for \a button. To return to the factory
262 * default pass an empty string as \a qcopMessage. 262 * default pass an empty string as \a qcopMessage.
263 */ 263 */
264 void remapHeldAction ( int button, const OQCopMessage &qcopMessage ); 264 void remapHeldAction ( int button, const OQCopMessage &qcopMessage );
265 265
266 /** 266 /**
267 * How long (in ms) you have to press a button for a "hold" action 267 * How long (in ms) you have to press a button for a "hold" action
268 */ 268 */
269 uint buttonHoldTime ( ) const; 269 uint buttonHoldTime ( ) const;
270 270
271signals: 271signals:
272 void buttonMappingChanged ( ); 272 void buttonMappingChanged ( );
273 273
274private slots: 274private slots:
275 void systemMessage ( const QCString &, const QByteArray & ); 275 void systemMessage ( const QCString &, const QByteArray & );
276 276
277protected: 277protected:
278 void reloadButtonMapping ( ); 278 void reloadButtonMapping ( );
279 /* ugly virtual hook */ 279 /* ugly virtual hook */
280 virtual void virtual_hook( int id, void* data ); 280 virtual void virtual_hook( int id, void* data );
281
282protected:
283 enum { VIRTUAL_ROTATION = 0x200, VIRTUAL_DIRECTION,
284 VIRTUAL_HAS_HINGE, VIRTUAL_HINGE };
285 struct VirtRotation {
286 Transformation trans;
287 };
288 struct VirtDirection {
289 ODirection direct;
290 };
291 struct VirtHasHinge {
292 bool hasHinge;
293 };
294 struct VirtHingeStatus {
295 OHingeStatus hingeStat;
296 };
281}; 297};
282 298
283} 299}
284 300
285#endif 301#endif
286 302