summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--libopie/odevice.cpp90
-rw-r--r--libopie/odevice.h10
2 files changed, 88 insertions, 12 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index e24e043..bc09e92 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -119,48 +119,51 @@ public:
119 static bool isJornada(); 119 static bool isJornada();
120 120
121}; 121};
122 122
123class Zaurus : public ODevice { 123class Zaurus : public ODevice {
124protected: 124protected:
125 virtual void init ( ); 125 virtual void init ( );
126 virtual void initButtons ( ); 126 virtual void initButtons ( );
127 127
128public: 128public:
129 virtual bool setSoftSuspend ( bool soft ); 129 virtual bool setSoftSuspend ( bool soft );
130 130
131 virtual bool setDisplayBrightness ( int b ); 131 virtual bool setDisplayBrightness ( int b );
132 virtual int displayBrightnessResolution ( ) const; 132 virtual int displayBrightnessResolution ( ) const;
133 133
134 virtual void alarmSound ( ); 134 virtual void alarmSound ( );
135 virtual void keySound ( ); 135 virtual void keySound ( );
136 virtual void touchSound ( ); 136 virtual void touchSound ( );
137 137
138 virtual QValueList <OLed> ledList ( ) const; 138 virtual QValueList <OLed> ledList ( ) const;
139 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 139 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
140 virtual OLedState ledState ( OLed led ) const; 140 virtual OLedState ledState ( OLed led ) const;
141 virtual bool setLedState ( OLed led, OLedState st ); 141 virtual bool setLedState ( OLed led, OLedState st );
142 142
143 virtual bool hasHingeSensor() const;
144 virtual OHingeStatus readHingeSensor();
145
143 static bool isZaurus(); 146 static bool isZaurus();
144 147
145 // Does this break BC? 148 // Does this break BC?
146 virtual bool suspend ( ); 149 virtual bool suspend ( );
147 virtual Transformation rotation ( ) const; 150 virtual Transformation rotation ( ) const;
148 virtual ODirection direction ( ) const; 151 virtual ODirection direction ( ) const;
149 152
150protected: 153protected:
151 virtual void buzzer ( int snd ); 154 virtual void buzzer ( int snd );
152 155
153 OLedState m_leds [1]; 156 OLedState m_leds [1];
154 bool m_embedix; 157 bool m_embedix;
155}; 158};
156 159
157class SIMpad : public ODevice, public QWSServer::KeyboardFilter { 160class SIMpad : public ODevice, public QWSServer::KeyboardFilter {
158protected: 161protected:
159 virtual void init ( ); 162 virtual void init ( );
160 virtual void initButtons ( ); 163 virtual void initButtons ( );
161 164
162public: 165public:
163 virtual bool setSoftSuspend ( bool soft ); 166 virtual bool setSoftSuspend ( bool soft );
164 virtual bool suspend(); 167 virtual bool suspend();
165 168
166 virtual bool setDisplayStatus( bool on ); 169 virtual bool setDisplayStatus( bool on );
@@ -802,64 +805,80 @@ OLedState ODevice::ledState ( OLed /*which*/ ) const
802} 805}
803 806
804/** 807/**
805 * Set the state for a LED 808 * Set the state for a LED
806 * @param which Which OLed to use 809 * @param which Which OLed to use
807 * @param st The state to set 810 * @param st The state to set
808 * @return success or failure 811 * @return success or failure
809 */ 812 */
810bool ODevice::setLedState ( OLed which, OLedState st ) 813bool ODevice::setLedState ( OLed which, OLedState st )
811{ 814{
812 Q_UNUSED( which ) 815 Q_UNUSED( which )
813 Q_UNUSED( st ) 816 Q_UNUSED( st )
814 return false; 817 return false;
815} 818}
816 819
817/** 820/**
818 * @return if the device has a light sensor 821 * @return if the device has a light sensor
819 */ 822 */
820bool ODevice::hasLightSensor ( ) const 823bool ODevice::hasLightSensor ( ) const
821{ 824{
822 return false; 825 return false;
823} 826}
824 827
825/** 828/**
826 * @return a value from the light senso 829 * @return a value from the light sensor
827 */ 830 */
828int ODevice::readLightSensor ( ) 831int ODevice::readLightSensor ( )
829{ 832{
830 return -1; 833 return -1;
831} 834}
832 835
833/** 836/**
834 * @return the light sensor resolution whatever that is ;) 837 * @return the light sensor resolution
835 */ 838 */
836int ODevice::lightSensorResolution ( ) const 839int ODevice::lightSensorResolution ( ) const
837{ 840{
838 return 0; 841 return 0;
839} 842}
840 843
841/** 844/**
845 * @return if the device has a hinge sensor
846 */
847bool ODevice::hasHingeSensor ( ) const
848{
849 return false;
850}
851
852/**
853 * @return a value from the hinge sensor
854 */
855OHingeStatus ODevice::readHingeSensor ( )
856{
857 return CASE_UNKNOWN;
858}
859
860/**
842 * @return a list with CPU frequencies supported by the hardware 861 * @return a list with CPU frequencies supported by the hardware
843 */ 862 */
844const QStrList &ODevice::allowedCpuFrequencies ( ) const 863const QStrList &ODevice::allowedCpuFrequencies ( ) const
845{ 864{
846 return *d->m_cpu_frequencies; 865 return *d->m_cpu_frequencies;
847} 866}
848 867
849 868
850/** 869/**
851 * Set desired CPU frequency 870 * Set desired CPU frequency
852 * 871 *
853 * @param index index into d->m_cpu_frequencies of the frequency to be set 872 * @param index index into d->m_cpu_frequencies of the frequency to be set
854 */ 873 */
855bool ODevice::setCurrentCpuFrequency(uint index) 874bool ODevice::setCurrentCpuFrequency(uint index)
856{ 875{
857 if (index >= d->m_cpu_frequencies->count()) 876 if (index >= d->m_cpu_frequencies->count())
858 return false; 877 return false;
859 878
860 char *freq = d->m_cpu_frequencies->at(index); 879 char *freq = d->m_cpu_frequencies->at(index);
861 qWarning("set freq to %s", freq); 880 qWarning("set freq to %s", freq);
862 881
863 int fd; 882 int fd;
864 883
865 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) { 884 if ((fd = ::open("/proc/sys/cpu/0/speed", O_WRONLY)) >= 0) {
@@ -1924,68 +1943,84 @@ bool Zaurus::setSoftSuspend ( bool soft )
1924 if ( soft ) 1943 if ( soft )
1925 sources &= ~APM_EVT_POWER_BUTTON; 1944 sources &= ~APM_EVT_POWER_BUTTON;
1926 else 1945 else
1927 sources |= APM_EVT_POWER_BUTTON; 1946 sources |= APM_EVT_POWER_BUTTON;
1928 1947
1929 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources 1948 if ( ::ioctl ( fd, APM_IOCSEVTSRC, sources ) >= 0 ) // set new event sources
1930 res = true; 1949 res = true;
1931 else 1950 else
1932 perror ( "APM_IOCGEVTSRC" ); 1951 perror ( "APM_IOCGEVTSRC" );
1933 } 1952 }
1934 else 1953 else
1935 perror ( "APM_IOCGEVTSRC" ); 1954 perror ( "APM_IOCGEVTSRC" );
1936 1955
1937 ::close ( fd ); 1956 ::close ( fd );
1938 } 1957 }
1939 else 1958 else
1940 perror ( "/dev/apm_bios or /dev/misc/apm_bios" ); 1959 perror ( "/dev/apm_bios or /dev/misc/apm_bios" );
1941 1960
1942 return res; 1961 return res;
1943} 1962}
1944 1963
1945 1964
1946bool Zaurus::setDisplayBrightness ( int bright ) 1965bool Zaurus::setDisplayBrightness ( int bright )
1947{ 1966{
1948// FIXME The C7x0 have a proc-interface (/proc/drivers/corgi-bl) which
1949// is nice to use. Currently it exposes 16+1 levels. Implement this!
1950// (or wait for kergoth unifying the interfaces in the OpenZaurus kernel.)
1951 bool res = false; 1967 bool res = false;
1952 int fd; 1968 int fd;
1953 1969
1954 if ( bright > 255 ) 1970 if ( bright > 255 ) bright = 255;
1955 bright = 255; 1971 if ( bright < 0 ) bright = 0;
1956 if ( bright < 0 )
1957 bright = 0;
1958 1972
1959 if (m_embedix) { 1973 if ( m_embedix )
1974 {
1975 if ( d->m_model == Model_Zaurus_SLC7x0 )
1976 {
1977 // special treatment for devices with the corgi backlight interface
1978 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 )
1979 {
1980 if ( bright > 0x11 ) bright = 0x11;
1981 char writeCommand[100];
1982 const int count = sprintf( writeCommand, "0x%x\n", bright );
1983 res = ( ::write ( fd, writeCommand, count ) != -1 );
1984 ::close ( fd );
1985 }
1986 return res;
1987 }
1988 else
1989 {
1990 // standard treatment for devices with the dumb embedix frontlight interface
1960 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1991 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1961 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1992 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1962 if ( bright && !bl ) 1993 if ( bright && !bl )
1963 bl = 1; 1994 bl = 1;
1964 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 1995 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
1965 ::close ( fd ); 1996 ::close ( fd );
1966 } 1997 }
1967 } else { 1998 }
1999 }
2000 else
2001 {
2002 // special treatment for the OpenZaurus unified interface
1968#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */ 2003#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
1969 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) { 2004 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) {
1970 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 ); 2005 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 );
1971 ::close ( fd ); 2006 ::close ( fd );
1972 } 2007 }
1973 } 2008 }
1974 return res; 2009 return res;
1975} 2010}
1976 2011
1977bool Zaurus::suspend ( ) 2012bool Zaurus::suspend ( )
1978{ 2013{
1979 qDebug("ODevice::suspend"); 2014 qDebug("ODevice::suspend");
1980 if ( !isQWS( ) ) // only qwsserver is allowed to suspend 2015 if ( !isQWS( ) ) // only qwsserver is allowed to suspend
1981 return false; 2016 return false;
1982 2017
1983 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices 2018 if ( d-> m_model == Model_Unknown ) // better don't suspend in qvfb / on unkown devices
1984 return false; 2019 return false;
1985 2020
1986 bool res = false; 2021 bool res = false;
1987 2022
1988 struct timeval tvs, tvn; 2023 struct timeval tvs, tvn;
1989 ::gettimeofday ( &tvs, 0 ); 2024 ::gettimeofday ( &tvs, 0 );
1990 2025
1991 ::sync ( ); // flush fs caches 2026 ::sync ( ); // flush fs caches
@@ -2052,53 +2087,84 @@ ODirection Zaurus::direction ( ) const
2052 } else { 2087 } else {
2053 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION); 2088 retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2054 ::close (handle); 2089 ::close (handle);
2055 if (retval == 2 ) 2090 if (retval == 2 )
2056 dir = CCW; 2091 dir = CCW;
2057 else 2092 else
2058 dir = CW; 2093 dir = CW;
2059 } 2094 }
2060 break; 2095 break;
2061 case Model_Zaurus_SLA300: 2096 case Model_Zaurus_SLA300:
2062 case Model_Zaurus_SLB600: 2097 case Model_Zaurus_SLB600:
2063 case Model_Zaurus_SL5500: 2098 case Model_Zaurus_SL5500:
2064 case Model_Zaurus_SL5000: 2099 case Model_Zaurus_SL5000:
2065 default: 2100 default:
2066 dir = d-> m_direction; 2101 dir = d-> m_direction;
2067 break; 2102 break;
2068 } 2103 }
2069 return dir; 2104 return dir;
2070 2105
2071} 2106}
2072 2107
2073int Zaurus::displayBrightnessResolution ( ) const 2108int Zaurus::displayBrightnessResolution ( ) const
2074{ 2109{
2075 if (m_embedix) 2110 if (m_embedix)
2076 return 5; 2111 return d->m_model == Model_Zaurus_SLC7x0 ? 18 : 5;
2077 else 2112 else
2078 return 256; 2113 return 256;
2079} 2114}
2080 2115
2116bool Zaurus::hasHingeSensor() const
2117{
2118 return d->m_model == Model_Zaurus_SLC7x0;
2119}
2120
2121OHingeStatus Zaurus::readHingeSensor()
2122{
2123 int handle = ::open("/dev/apm_bios", O_RDWR|O_NONBLOCK);
2124 if (handle == -1)
2125 {
2126 qWarning("Zaurus::readHingeSensor() - failed (%s)", "unknown reason" ); //FIXME: use strerror
2127 return CASE_UNKNOWN;
2128 }
2129 else
2130 {
2131 int retval = ::ioctl(handle, SHARP_IOCTL_GET_ROTATION);
2132 ::close (handle);
2133 if ( retval == CASE_CLOSED || retval == CASE_PORTRAIT || retval == CASE_LANDSCAPE )
2134 {
2135 qDebug( "Zaurus::readHingeSensor() - result = %d", retval );
2136 return static_cast<OHingeStatus>( retval );
2137 }
2138 else
2139 {
2140 qWarning("Zaurus::readHingeSensor() - couldn't compute hinge status!" );
2141 return CASE_UNKNOWN;
2142 }
2143 }
2144}
2145
2146
2081/************************************************** 2147/**************************************************
2082 * 2148 *
2083 * SIMpad 2149 * SIMpad
2084 * 2150 *
2085 **************************************************/ 2151 **************************************************/
2086 2152
2087void SIMpad::init ( ) 2153void SIMpad::init ( )
2088{ 2154{
2089 d-> m_vendorstr = "SIEMENS"; 2155 d-> m_vendorstr = "SIEMENS";
2090 d-> m_vendor = Vendor_SIEMENS; 2156 d-> m_vendor = Vendor_SIEMENS;
2091 2157
2092 QFile f ( "/proc/hal/model" ); 2158 QFile f ( "/proc/hal/model" );
2093 2159
2094 //TODO Implement model checking 2160 //TODO Implement model checking
2095 //FIXME For now we assume an SL4 2161 //FIXME For now we assume an SL4
2096 2162
2097 d-> m_modelstr = "SL4"; 2163 d-> m_modelstr = "SL4";
2098 d-> m_model = Model_SIMpad_SL4; 2164 d-> m_model = Model_SIMpad_SL4;
2099 2165
2100 switch ( d-> m_model ) { 2166 switch ( d-> m_model ) {
2101 default: 2167 default:
2102 d-> m_rotation = Rot0; 2168 d-> m_rotation = Rot0;
2103 d-> m_direction = CCW; 2169 d-> m_direction = CCW;
2104 d-> m_holdtime = 1000; // 1000ms 2170 d-> m_holdtime = 1000; // 1000ms
diff --git a/libopie/odevice.h b/libopie/odevice.h
index 8273761..ee0b0ec 100644
--- a/libopie/odevice.h
+++ b/libopie/odevice.h
@@ -122,48 +122,55 @@ enum OLed {
122 Led_Power, 122 Led_Power,
123 Led_BlueTooth 123 Led_BlueTooth
124}; 124};
125 125
126enum OHardKey { 126enum OHardKey {
127 HardKey_Datebook = Qt::Key_F9, 127 HardKey_Datebook = Qt::Key_F9,
128 HardKey_Contacts = Qt::Key_F10, 128 HardKey_Contacts = Qt::Key_F10,
129 HardKey_Menu = Qt::Key_F11, 129 HardKey_Menu = Qt::Key_F11,
130 HardKey_Home = Qt::Key_F12, 130 HardKey_Home = Qt::Key_F12,
131 HardKey_Mail = Qt::Key_F13, 131 HardKey_Mail = Qt::Key_F13,
132 HardKey_Record = Qt::Key_F24, 132 HardKey_Record = Qt::Key_F24,
133 HardKey_Suspend = Qt::Key_F34, 133 HardKey_Suspend = Qt::Key_F34,
134 HardKey_Backlight = Qt::Key_F35, 134 HardKey_Backlight = Qt::Key_F35,
135 HardKey_Action = Qt::Key_F10, 135 HardKey_Action = Qt::Key_F10,
136 HardKey_OK = Qt::Key_F11, 136 HardKey_OK = Qt::Key_F11,
137 HardKey_End = Qt::Key_F12, 137 HardKey_End = Qt::Key_F12,
138}; 138};
139 139
140enum ODirection { 140enum ODirection {
141 CW = 0, 141 CW = 0,
142 CCW = 1, 142 CCW = 1,
143 Flip = 2, 143 Flip = 2,
144}; 144};
145 145
146enum OHingeStatus {
147 CASE_CLOSED = 3,
148 CASE_PORTRAIT = 2,
149 CASE_LANDSCAPE = 0,
150 CASE_UNKNOWN = 1,
151};
152
146/** 153/**
147 * A singleton which gives informations about device specefic option 154 * A singleton which gives informations about device specefic option
148 * like the Hardware used, LEDs, the Base Distribution and 155 * like the Hardware used, LEDs, the Base Distribution and
149 * hardware key mappings. 156 * hardware key mappings.
150 * 157 *
151 * @short A small class for device specefic options 158 * @short A small class for device specefic options
152 * @see QObject 159 * @see QObject
153 * @author Robert Griebl 160 * @author Robert Griebl
154 * @version 1.0 161 * @version 1.0
155 */ 162 */
156class ODevice : public QObject { 163class ODevice : public QObject {
157 Q_OBJECT 164 Q_OBJECT
158 165
159private: 166private:
160 /* disable copy */ 167 /* disable copy */
161 ODevice ( const ODevice & ); 168 ODevice ( const ODevice & );
162 169
163protected: 170protected:
164 ODevice ( ); 171 ODevice ( );
165 virtual void init ( ); 172 virtual void init ( );
166 virtual void initButtons ( ); 173 virtual void initButtons ( );
167 174
168 ODeviceData *d; 175 ODeviceData *d;
169 176
@@ -201,48 +208,51 @@ public:
201 virtual bool setDisplayContrast ( int contrast ); 208 virtual bool setDisplayContrast ( int contrast );
202 virtual int displayContrastResolution ( ) const; 209 virtual int displayContrastResolution ( ) const;
203 210
204 // don't add new virtual methods, use this: 211 // don't add new virtual methods, use this:
205 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); }; 212 ///*virtual */ void boo(int i ) { return virtual_hook(1,&i); };
206 // and in your subclass do do overwrite 213 // and in your subclass do do overwrite
207 //protected virtual int virtual_hook(int, void *) 214 //protected virtual int virtual_hook(int, void *)
208 // which is defined below 215 // which is defined below
209 216
210// input / output 217// input / output
211 //FIXME playAlarmSound and al might be better -zecke 218 //FIXME playAlarmSound and al might be better -zecke
212 virtual void alarmSound ( ); 219 virtual void alarmSound ( );
213 virtual void keySound ( ); 220 virtual void keySound ( );
214 virtual void touchSound ( ); 221 virtual void touchSound ( );
215 222
216 virtual QValueList <OLed> ledList ( ) const; 223 virtual QValueList <OLed> ledList ( ) const;
217 virtual QValueList <OLedState> ledStateList ( OLed led ) const; 224 virtual QValueList <OLedState> ledStateList ( OLed led ) const;
218 virtual OLedState ledState ( OLed led ) const; 225 virtual OLedState ledState ( OLed led ) const;
219 virtual bool setLedState ( OLed led, OLedState st ); 226 virtual bool setLedState ( OLed led, OLedState st );
220 227
221 virtual bool hasLightSensor ( ) const; 228 virtual bool hasLightSensor ( ) const;
222 virtual int readLightSensor ( ); 229 virtual int readLightSensor ( );
223 virtual int lightSensorResolution ( ) const; 230 virtual int lightSensorResolution ( ) const;
224 231
232 virtual bool hasHingeSensor ( ) const;
233 virtual OHingeStatus readHingeSensor ( );
234
225 const QStrList &allowedCpuFrequencies() const; 235 const QStrList &allowedCpuFrequencies() const;
226 bool setCurrentCpuFrequency(uint index); 236 bool setCurrentCpuFrequency(uint index);
227 237
228 /** 238 /**
229 * Returns the available buttons on this device. The number and location 239 * Returns the available buttons on this device. The number and location
230 * 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
231 * 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
232 * button. Note that this list only contains "user mappable" buttons. 242 * button. Note that this list only contains "user mappable" buttons.
233 */ 243 */
234 const QValueList<ODeviceButton> &buttons ( ) /* ### make const */; 244 const QValueList<ODeviceButton> &buttons ( ) /* ### make const */;
235 245
236 /** 246 /**
237 * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it 247 * Returns the DeviceButton for the \a keyCode. If \a keyCode is not found, it
238 * returns 0L 248 * returns 0L
239 */ 249 */
240 const ODeviceButton *buttonForKeycode ( ushort keyCode ); 250 const ODeviceButton *buttonForKeycode ( ushort keyCode );
241 251
242 /** 252 /**
243 * Reassigns the pressed action for \a button. To return to the factory 253 * Reassigns the pressed action for \a button. To return to the factory
244 * default pass an empty string as \a qcopMessage. 254 * default pass an empty string as \a qcopMessage.
245 */ 255 */
246 void remapPressedAction ( int button, const OQCopMessage &qcopMessage ); 256 void remapPressedAction ( int button, const OQCopMessage &qcopMessage );
247 257
248 /** 258 /**