summaryrefslogtreecommitdiff
authormickeyl <mickeyl>2003-12-29 16:51:07 (UTC)
committer mickeyl <mickeyl>2003-12-29 16:51:07 (UTC)
commit8224dfc07a698d4c40cb240d315dc81b67512015 (patch) (unidiff)
tree0cdbb05aab54948421c873ccd25881caf1e474c5
parentdae677b6e29e2a0efb7128bcc4b0d87bf2b535dd (diff)
downloadopie-8224dfc07a698d4c40cb240d315dc81b67512015.zip
opie-8224dfc07a698d4c40cb240d315dc81b67512015.tar.gz
opie-8224dfc07a698d4c40cb240d315dc81b67512015.tar.bz2
- add fine granular backlight support for devices with the corgi backlight interface
- add hinge sensor framework for devices with hinge sensors
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp136
-rw-r--r--libopie/odevice.h14
2 files changed, 113 insertions, 37 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index e24e043..bc09e92 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -140,9 +140,12 @@ public:
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;
@@ -533,7 +536,7 @@ void ODevice::initButtons ( )
533 536
534ODevice::~ODevice ( ) 537ODevice::~ODevice ( )
535{ 538{
536// we leak m_devicebuttons and m_cpu_frequency 539// we leak m_devicebuttons and m_cpu_frequency
537// but it's a singleton and it is not so importantant 540// but it's a singleton and it is not so importantant
538// -zecke 541// -zecke
539 delete d; 542 delete d;
@@ -823,7 +826,7 @@ bool ODevice::hasLightSensor ( ) const
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{
@@ -831,7 +834,7 @@ int ODevice::readLightSensor ( )
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{
@@ -839,6 +842,22 @@ int ODevice::lightSensorResolution ( ) const
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
@@ -849,7 +868,7 @@ const QStrList &ODevice::allowedCpuFrequencies ( ) const
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)
@@ -1782,7 +1801,7 @@ void Zaurus::buzzer ( int sound )
1782 break; 1801 break;
1783 default: 1802 default:
1784 soundname = "alarm"; 1803 soundname = "alarm";
1785 1804
1786 } 1805 }
1787 } 1806 }
1788 1807
@@ -1945,33 +1964,49 @@ bool Zaurus::setSoftSuspend ( bool soft )
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 1967 bool res = false;
1949// is nice to use. Currently it exposes 16+1 levels. Implement this! 1968 int fd;
1950// (or wait for kergoth unifying the interfaces in the OpenZaurus kernel.) 1969
1951 bool res = false; 1970 if ( bright > 255 ) bright = 255;
1952 int fd; 1971 if ( bright < 0 ) bright = 0;
1953 1972
1954 if ( bright > 255 ) 1973 if ( m_embedix )
1955 bright = 255; 1974 {
1956 if ( bright < 0 ) 1975 if ( d->m_model == Model_Zaurus_SLC7x0 )
1957 bright = 0; 1976 {
1958 1977 // special treatment for devices with the corgi backlight interface
1959 if (m_embedix) { 1978 if (( fd = ::open ( "/proc/driver/fl/corgi-bl", O_WRONLY )) >= 0 )
1960 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) { 1979 {
1961 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus 1980 if ( bright > 0x11 ) bright = 0x11;
1962 if ( bright && !bl ) 1981 char writeCommand[100];
1963 bl = 1; 1982 const int count = sprintf( writeCommand, "0x%x\n", bright );
1964 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 ); 1983 res = ( ::write ( fd, writeCommand, count ) != -1 );
1965 ::close ( fd ); 1984 ::close ( fd );
1966 } 1985 }
1967 } else { 1986 return res;
1968#define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */ 1987 }
1969 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) { 1988 else
1970 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 ); 1989 {
1971 ::close ( fd ); 1990 // standard treatment for devices with the dumb embedix frontlight interface
1972 } 1991 if (( fd = ::open ( "/dev/fl", O_WRONLY )) >= 0 ) {
1973 } 1992 int bl = ( bright * 4 + 127 ) / 255; // only 4 steps on zaurus
1974 return res; 1993 if ( bright && !bl )
1994 bl = 1;
1995 res = ( ::ioctl ( fd, FL_IOCTL_STEP_CONTRAST, bl ) == 0 );
1996 ::close ( fd );
1997 }
1998 }
1999 }
2000 else
2001 {
2002 // special treatment for the OpenZaurus unified interface
2003 #define FB_BACKLIGHT_SET_BRIGHTNESS _IOW('F', 1, u_int) /* set brightness */
2004 if (( fd = ::open ( "/dev/fb0", O_WRONLY )) >= 0 ) {
2005 res = ( ::ioctl ( fd , FB_BACKLIGHT_SET_BRIGHTNESS, bright ) == 0 );
2006 ::close ( fd );
2007 }
2008 }
2009 return res;
1975} 2010}
1976 2011
1977bool Zaurus::suspend ( ) 2012bool Zaurus::suspend ( )
@@ -2073,11 +2108,42 @@ ODirection Zaurus::direction ( ) const
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
diff --git a/libopie/odevice.h b/libopie/odevice.h
index 8273761..ee0b0ec 100644
--- a/libopie/odevice.h
+++ b/libopie/odevice.h
@@ -143,6 +143,13 @@ enum ODirection {
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
@@ -207,8 +214,8 @@ public:
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 ( );
@@ -222,6 +229,9 @@ public:
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