-rw-r--r-- | libopie/odevice.cpp | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp index 103104f..02f13b5 100644 --- a/libopie/odevice.cpp +++ b/libopie/odevice.cpp | |||
@@ -118,49 +118,51 @@ public: | |||
118 | virtual int displayBrightnessResolution ( ) const; | 118 | virtual int displayBrightnessResolution ( ) const; |
119 | 119 | ||
120 | virtual void alarmSound ( ); | 120 | virtual void alarmSound ( ); |
121 | virtual void keySound ( ); | 121 | virtual void keySound ( ); |
122 | virtual void touchSound ( ); | 122 | virtual void touchSound ( ); |
123 | 123 | ||
124 | virtual QValueList <OLed> ledList ( ) const; | 124 | virtual QValueList <OLed> ledList ( ) const; |
125 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 125 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
126 | virtual OLedState ledState ( OLed led ) const; | 126 | virtual OLedState ledState ( OLed led ) const; |
127 | virtual bool setLedState ( OLed led, OLedState st ); | 127 | virtual bool setLedState ( OLed led, OLedState st ); |
128 | 128 | ||
129 | protected: | 129 | protected: |
130 | virtual void buzzer ( int snd ); | 130 | virtual void buzzer ( int snd ); |
131 | 131 | ||
132 | OLedState m_leds [1]; | 132 | OLedState m_leds [1]; |
133 | }; | 133 | }; |
134 | 134 | ||
135 | class SIMpad : public ODevice, public QWSServer::KeyboardFilter { | 135 | class SIMpad : public ODevice, public QWSServer::KeyboardFilter { |
136 | protected: | 136 | protected: |
137 | virtual void init ( ); | 137 | virtual void init ( ); |
138 | virtual void initButtons ( ); | 138 | virtual void initButtons ( ); |
139 | 139 | ||
140 | public: | 140 | public: |
141 | virtual bool setSoftSuspend ( bool soft ); | 141 | virtual bool setSoftSuspend ( bool soft ); |
142 | virtual bool suspend(); | ||
142 | 143 | ||
144 | virtual bool setDisplayStatus( bool on ); | ||
143 | virtual bool setDisplayBrightness ( int b ); | 145 | virtual bool setDisplayBrightness ( int b ); |
144 | virtual int displayBrightnessResolution ( ) const; | 146 | virtual int displayBrightnessResolution ( ) const; |
145 | 147 | ||
146 | virtual void alarmSound ( ); | 148 | virtual void alarmSound ( ); |
147 | 149 | ||
148 | virtual QValueList <OLed> ledList ( ) const; | 150 | virtual QValueList <OLed> ledList ( ) const; |
149 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; | 151 | virtual QValueList <OLedState> ledStateList ( OLed led ) const; |
150 | virtual OLedState ledState ( OLed led ) const; | 152 | virtual OLedState ledState ( OLed led ) const; |
151 | virtual bool setLedState ( OLed led, OLedState st ); | 153 | virtual bool setLedState ( OLed led, OLedState st ); |
152 | 154 | ||
153 | protected: | 155 | protected: |
154 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); | 156 | virtual bool filter ( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); |
155 | virtual void timerEvent ( QTimerEvent *te ); | 157 | virtual void timerEvent ( QTimerEvent *te ); |
156 | 158 | ||
157 | int m_power_timer; | 159 | int m_power_timer; |
158 | 160 | ||
159 | OLedState m_leds [1]; //FIXME check if really only one | 161 | OLedState m_leds [1]; //FIXME check if really only one |
160 | }; | 162 | }; |
161 | 163 | ||
162 | struct i_button { | 164 | struct i_button { |
163 | uint model; | 165 | uint model; |
164 | Qt::Key code; | 166 | Qt::Key code; |
165 | char *utext; | 167 | char *utext; |
166 | char *pix; | 168 | char *pix; |
@@ -1694,57 +1696,93 @@ void SIMpad::alarmSound ( ) | |||
1694 | if ( volalarm < 0 ) | 1696 | if ( volalarm < 0 ) |
1695 | volalarm = 0; | 1697 | volalarm = 0; |
1696 | else if ( volalarm > 100 ) | 1698 | else if ( volalarm > 100 ) |
1697 | volalarm = 100; | 1699 | volalarm = 100; |
1698 | volalarm |= ( volalarm << 8 ); | 1700 | volalarm |= ( volalarm << 8 ); |
1699 | 1701 | ||
1700 | if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) | 1702 | if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 ) |
1701 | vol_reset = true; | 1703 | vol_reset = true; |
1702 | } | 1704 | } |
1703 | } | 1705 | } |
1704 | 1706 | ||
1705 | snd. play ( ); | 1707 | snd. play ( ); |
1706 | while ( !snd. isFinished ( )) | 1708 | while ( !snd. isFinished ( )) |
1707 | qApp-> processEvents ( ); | 1709 | qApp-> processEvents ( ); |
1708 | 1710 | ||
1709 | if ( fd >= 0 ) { | 1711 | if ( fd >= 0 ) { |
1710 | if ( vol_reset ) | 1712 | if ( vol_reset ) |
1711 | ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); | 1713 | ::ioctl ( fd, MIXER_WRITE( 0 ), &vol ); |
1712 | ::close ( fd ); | 1714 | ::close ( fd ); |
1713 | } | 1715 | } |
1714 | #endif | 1716 | #endif |
1715 | } | 1717 | } |
1716 | 1718 | ||
1717 | 1719 | ||
1720 | bool SIMpad::suspend ( ) // Must override because SIMpad does NOT have apm | ||
1721 | { | ||
1722 | qDebug( "ODevice for SIMpad: suspend()" ); | ||
1723 | if ( !isQWS( ) ) // only qwsserver is allowed to suspend | ||
1724 | return false; | ||
1725 | |||
1726 | bool res = false; | ||
1727 | |||
1728 | struct timeval tvs, tvn; | ||
1729 | ::gettimeofday ( &tvs, 0 ); | ||
1730 | |||
1731 | ::sync ( ); // flush fs caches | ||
1732 | res = ( ::system ( "echo > /proc/sys/pm/suspend" ) == 0 ); //TODO make better :) | ||
1733 | |||
1734 | return res; | ||
1735 | } | ||
1736 | |||
1737 | |||
1718 | bool SIMpad::setSoftSuspend ( bool soft ) | 1738 | bool SIMpad::setSoftSuspend ( bool soft ) |
1719 | { | 1739 | { |
1720 | //TODO | 1740 | qDebug( "ODevice for SIMpad: UNHANDLED setSoftSuspend(%s)", soft? "on" : "off" ); |
1721 | return false; | 1741 | return false; |
1722 | } | 1742 | } |
1723 | 1743 | ||
1724 | 1744 | ||
1745 | bool SIMpad::setDisplayStatus ( bool on ) | ||
1746 | { | ||
1747 | qDebug( "ODevice for SIMpad: setDisplayStatus(%s)", on? "on" : "off" ); | ||
1748 | |||
1749 | bool res = false; | ||
1750 | int fd; | ||
1751 | |||
1752 | QString cmdline = QString().sprintf( "echo %s > /proc/cs3", on ? "0xd41a" : "0xd40a" ); //TODO make better :) | ||
1753 | |||
1754 | if (( fd = ::open ( "/dev/fb0", O_RDWR )) >= 0 ) { | ||
1755 | res = ( ::system( (const char*) cmdline ) == 0 ); | ||
1756 | ::close ( fd ); | ||
1757 | } | ||
1758 | return res; | ||
1759 | } | ||
1760 | |||
1761 | |||
1725 | bool SIMpad::setDisplayBrightness ( int bright ) | 1762 | bool SIMpad::setDisplayBrightness ( int bright ) |
1726 | { | 1763 | { |
1764 | qDebug( "ODevice for SIMpad: setDisplayBrightness( %d )", bright ); | ||
1727 | bool res = false; | 1765 | bool res = false; |
1728 | int fd; | 1766 | int fd; |
1729 | 1767 | ||
1730 | if ( bright > 255 ) | 1768 | if ( bright > 255 ) |
1731 | bright = 255; | 1769 | bright = 255; |
1732 | if ( bright < 0 ) | 1770 | if ( bright < 0 ) |
1733 | bright = 0; | 1771 | bright = 0; |
1734 | 1772 | ||
1735 | if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) { | 1773 | if (( fd = ::open ( SIMPAD_BACKLIGHT_CONTROL, O_WRONLY )) >= 0 ) { |
1736 | int value = 255 - bright; | 1774 | int value = 255 - bright; |
1737 | const int mask = SIMPAD_BACKLIGHT_MASK; | 1775 | const int mask = SIMPAD_BACKLIGHT_MASK; |
1738 | value = value << 8; | 1776 | value = value << 8; |
1739 | value += mask; | 1777 | value += mask; |
1740 | char writeCommand[100]; | 1778 | char writeCommand[100]; |
1741 | const int count = sprintf( writeCommand, "0x%x\n", value ); | 1779 | const int count = sprintf( writeCommand, "0x%x\n", value ); |
1742 | res = ( ::write ( fd, writeCommand, count ) != -1 ); | 1780 | res = ( ::write ( fd, writeCommand, count ) != -1 ); |
1743 | ::close ( fd ); | 1781 | ::close ( fd ); |
1744 | } | 1782 | } |
1745 | return res; | 1783 | return res; |
1746 | } | 1784 | } |
1747 | 1785 | ||
1748 | 1786 | ||
1749 | int SIMpad::displayBrightnessResolution ( ) const | 1787 | int SIMpad::displayBrightnessResolution ( ) const |
1750 | { | 1788 | { |