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
@@ -72,12 +72,13 @@ public:
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 ( );
@@ -137,27 +138,28 @@ public:
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 ( );
@@ -441,13 +443,13 @@ static inline bool isQWS()
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 ( );
@@ -725,21 +727,27 @@ QString ODevice::systemVersionString ( ) const
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 ( )
@@ -843,21 +851,26 @@ int ODevice::lightSensorResolution ( ) const
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
@@ -1000,14 +1013,35 @@ void ODevice::remapHeldAction ( int button, const OQCopMessage &action )
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 *
@@ -1037,16 +1071,16 @@ void 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 ( );
@@ -1060,13 +1094,13 @@ void Yopy::initButtons ( )
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
@@ -1074,22 +1108,22 @@ void Yopy::initButtons ( )
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{
@@ -1540,13 +1574,13 @@ int iPAQ::lightSensorResolution ( ) const
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;
@@ -1818,13 +1852,13 @@ void Zaurus::buzzer ( int sound )
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 );
@@ -1845,21 +1879,21 @@ void Zaurus::buzzer ( int sound )
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{
@@ -2063,15 +2097,15 @@ Transformation Zaurus::rotation ( ) const
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:
@@ -2150,12 +2184,40 @@ OHingeStatus Zaurus::readHingeSensor()
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
diff --git a/libopie/odevice.h b/libopie/odevice.h
index 791d358..fc41079 100644
--- a/libopie/odevice.h
+++ b/libopie/odevice.h
@@ -191,14 +191,14 @@ public:
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
@@ -226,14 +226,14 @@ public:
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
@@ -275,12 +275,28 @@ private 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