summaryrefslogtreecommitdiff
authorsandman <sandman>2002-11-21 22:34:23 (UTC)
committer sandman <sandman>2002-11-21 22:34:23 (UTC)
commit7f5fc5e8e1cadbeae4a6f13b1efcbe3468505795 (patch) (side-by-side diff)
treec71c2b5a40b5b110bbb42b434e8ca743dbb69c69
parent71f340d760a5863152ff5d22c60334f421a6c488 (diff)
downloadopie-7f5fc5e8e1cadbeae4a6f13b1efcbe3468505795.zip
opie-7f5fc5e8e1cadbeae4a6f13b1efcbe3468505795.tar.gz
opie-7f5fc5e8e1cadbeae4a6f13b1efcbe3468505795.tar.bz2
support for the new H3900 iPAQ in the iPAQ keyfilter. Since HP thinks it is
funny to change the screen rotation on every model, I have also restructured the keyfilter to make it more readable.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/odevice.cpp72
1 files changed, 35 insertions, 37 deletions
diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index d8415ad..bc43c52 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -453,170 +453,168 @@ QValueList <OLedState> iPAQ::ledStateList ( OLed l ) const
{
QValueList <OLedState> vl;
if ( l == Led_Power )
vl << Led_Off << Led_On << Led_BlinkSlow << Led_BlinkFast;
else if ( l == Led_BlueTooth && d-> m_model == Model_iPAQ_H38xx )
vl << Led_Off; // << Led_On << ???
return vl;
}
OLedState iPAQ::ledState ( OLed l ) const
{
switch ( l ) {
case Led_Power:
return m_leds [0];
case Led_BlueTooth:
return m_leds [1];
default:
return Led_Off;
}
}
bool iPAQ::setLedState ( OLed l, OLedState st )
{
static int fd = ::open ( "/dev/touchscreen/0", O_RDWR | O_NONBLOCK );
if ( l == Led_Power ) {
if ( fd >= 0 ) {
LED_IN leds;
::memset ( &leds, 0, sizeof( leds ));
leds. TotalTime = 0;
leds. OnTime = 0;
leds. OffTime = 1;
leds. OffOnBlink = 2;
switch ( st ) {
case Led_Off : leds. OffOnBlink = 0; break;
case Led_On : leds. OffOnBlink = 1; break;
case Led_BlinkSlow: leds. OnTime = 10; leds. OffTime = 10; break;
case Led_BlinkFast: leds. OnTime = 5; leds. OffTime = 5; break;
}
if ( ::ioctl ( fd, LED_ON, &leds ) >= 0 ) {
m_leds [0] = st;
return true;
}
}
}
return false;
}
//QValueList <int> iPAQ::keyList ( ) const
//{
// QValueList <int> vl;
// vl << HardKey_Datebook << HardKey_Contacts << ( model ( ) == Model_iPAQ_H38xx ? HardKey_Mail : HardKey_Menu ) << HardKey_Home << HardKey_Record << HardKey_Suspend << HardKey_Backlight;
// return vl;
//}
bool iPAQ::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
{
int newkeycode = keycode;
-
- // simple susbstitutions
- switch ( d-> m_model ) {
- case Model_iPAQ_H38xx:
- // H38xx has no "Q" key anymore - this is now the Mail key
- if ( keycode == HardKey_Menu )
+ switch ( keycode ) {
+ // H38xx/H39xx have no "Q" key anymore - this is now the Mail key
+ case HardKey_Menu: {
+ if (( d-> m_model == Model_iPAQ_H38xx ) ||
+ ( d-> m_model == Model_iPAQ_H39xx )) {
newkeycode = HardKey_Mail;
- //nobreak
-
- case Model_iPAQ_H31xx:
- // Rotate cursor keys 180°
- switch ( keycode ) {
- case Key_Left : newkeycode = Key_Right; break;
- case Key_Right: newkeycode = Key_Left; break;
- case Key_Up : newkeycode = Key_Down; break;
- case Key_Down : newkeycode = Key_Up; break;
}
- //nobreak;
-
- case Model_iPAQ_H36xx:
- case Model_iPAQ_H37xx:
- // map Power Button short/long press to F34/F35
- if ( keycode == Key_SysReq ) {
- if ( isPress ) {
- if ( m_power_timer )
- killTimer ( m_power_timer );
- m_power_timer = startTimer ( 500 );
- }
- else if ( m_power_timer ) {
- killTimer ( m_power_timer );
- m_power_timer = 0;
- QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
- QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
- }
- newkeycode = Key_unknown;
+ break;
+ }
+
+ // Rotate cursor keys 180°
+ case Key_Left :
+ case Key_Right:
+ case Key_Up :
+ case Key_Down : {
+ if (( d-> m_model == Model_iPAQ_H31xx ) ||
+ ( d-> m_model == Model_iPAQ_H38xx )) {
+ newkeycode = Key_Left + ( keycode - Key_Left + 2 ) % 4;
}
- //nobreak;
-
- default:
break;
- }
+ }
+ // map Power Button short/long press to F34/F35
+ case Key_SysReq: {
+ if ( isPress ) {
+ if ( m_power_timer )
+ killTimer ( m_power_timer );
+ m_power_timer = startTimer ( 500 );
+ }
+ else if ( m_power_timer ) {
+ killTimer ( m_power_timer );
+ m_power_timer = 0;
+ QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, true, false );
+ QWSServer::sendKeyEvent ( -1, HardKey_Suspend, 0, false, false );
+ }
+ newkeycode = Key_unknown;
+ break;
+ }
+ }
+
if ( newkeycode != keycode ) {
if ( newkeycode != Key_unknown )
QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
return true;
}
else
return false;
}
void iPAQ::timerEvent ( QTimerEvent * )
{
killTimer ( m_power_timer );
m_power_timer = 0;
QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, true, false );
QWSServer::sendKeyEvent ( -1, HardKey_Backlight, 0, false, false );
}
void iPAQ::alarmSound ( )
{
#ifndef QT_NO_SOUND
static Sound snd ( "alarm" );
int fd;
int vol;
bool vol_reset = false;
if (( fd = ::open ( "/dev/sound/mixer", O_RDWR )) >= 0 ) {
if ( ::ioctl ( fd, MIXER_READ( 0 ), &vol ) >= 0 ) {
Config cfg ( "qpe" );
cfg. setGroup ( "Volume" );
int volalarm = cfg. readNumEntry ( "AlarmPercent", 50 );
if ( volalarm < 0 )
volalarm = 0;
else if ( volalarm > 100 )
volalarm = 100;
volalarm |= ( volalarm << 8 );
if (( volalarm & 0xff ) > ( vol & 0xff )) {
if ( ::ioctl ( fd, MIXER_WRITE( 0 ), &volalarm ) >= 0 )
vol_reset = true;
}
}
}
snd. play ( );
while ( !snd. isFinished ( ))
qApp-> processEvents ( );
if ( fd >= 0 ) {
if ( vol_reset )
::ioctl ( fd, MIXER_WRITE( 0 ), &vol );
::close ( fd );
}
#endif
}
bool iPAQ::setSoftSuspend ( bool soft )
{
bool res = false;
int fd;
if (( fd = ::open ( "/proc/sys/ts/suspend_button_mode", O_WRONLY )) >= 0 ) {