From 2693819adb7472aacf78cc4202ba7ee61b280b49 Mon Sep 17 00:00:00 2001 From: zecke Date: Wed, 10 Aug 2005 19:42:03 +0000 Subject: libope2/opiecore/odevice_mypal.[cpp,h]: -Patch by "Pawel Kolodziejski" to add Asus MyPal support to Opie --- (limited to 'libopie2') diff --git a/libopie2/opiecore/device/odevice_mypal.cpp b/libopie2/opiecore/device/odevice_mypal.cpp new file mode 100644 index 0000000..45c70ae --- a/dev/null +++ b/libopie2/opiecore/device/odevice_mypal.cpp @@ -0,0 +1,252 @@ +/* +                 This file is part of the Opie Project + =. (C) 2002-2005 The Opie Team + .=l. +           .>+-= + _;:,     .>    :=|. This program is free software; you can +.> <`_,   >  .   <= redistribute it and/or modify it under +:`=1 )Y*s>-.--   : the terms of the GNU Library General Public +.="- .-=="i,     .._ License as published by the Free Software + - .   .-<_>     .<> Foundation; version 2 of the License. +     ._= =}       : +    .%`+i>       _;_. +    .i_,=:_.      -`: PARTICULAR PURPOSE. See the GNU +..}^=.=       =       ; Library General Public License for more +++=   -.     .`     .: details. + :     =  ...= . :.=- + -.   .:....=;==+<; You should have received a copy of the GNU +  -_. . .   )=.  = Library General Public License along with +    --        :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#include "odevice_mypal.h" + +/* QT */ +#include +#include +#include +#include + +/* OPIE */ +#include +#include +#include + +#include +#include + +/* STD */ +#include +#include +#include +#include +#include +#include +#include +#ifndef QT_NO_SOUND +#include +#endif + + +using namespace Opie::Core; +using namespace Opie::Core::Internal; + +struct m_button mypal_buttons [] = { + { Model_MyPal_716, + Qt::Key_F9, QT_TRANSLATE_NOOP("Button", "Calendar Button"), + "devicebuttons/ipaq_calendar", + "datebook", "nextView()", + "today", "raise()" }, + { Model_MyPal_716, + Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Contacts Button"), + "devicebuttons/ipaq_contact", + "addressbook", "raise()", + "addressbook", "beamBusinessCard()" }, + { Model_MyPal_716, + Qt::Key_F8, QT_TRANSLATE_NOOP("Button", "Mail Button"), + "devicebuttons/ipaq_mail", + "opiemail", "raise()", + "opiemail", "newMail()" }, + { Model_MyPal_716, + Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "Home Button"), + "devicebuttons/ipaq_home", + "QPE/Launcher", "home()", + "buttonsettings", "raise()" }, + { Model_MyPal_716, + Qt::Key_F7, QT_TRANSLATE_NOOP("Button", "Record Button"), + "devicebuttons/ipaq_record", + "QPE/VMemo", "toggleRecord()", + "sound", "raise()" }, +}; + +void MyPal::init(const QString& model) +{ + d->m_vendorstr = "Asus"; + d->m_vendor = Vendor_Asus; + + d->m_modelstr = model.mid(model.findRev('A')); + if ( d->m_modelstr == "A716" ) + d->m_model = Model_MyPal_716; + else + d->m_model = Model_Unknown; + + d->m_rotation = Rot0; + + m_power_timer = 0; +} + +void MyPal::initButtons() +{ + if ( d->m_buttons ) + return; + + if ( isQWS( ) ) { + addPreHandler(this); + } + + d->m_buttons = new QValueList ; + + for ( uint i = 0; i < ( sizeof( mypal_buttons ) / sizeof( m_button )); i++ ) { + m_button *mb = mypal_buttons + i; + ODeviceButton b; + + if (( mb->model & d->m_model ) == d->m_model ) { + b. setKeycode ( mb->code ); + b. setUserText ( QObject::tr ( "Button", mb->utext )); + b. setPixmap ( OResource::loadPixmap ( mb->pix )); + b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( mb->fpressedservice ), mb->fpressedaction )); + b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( mb->fheldservice ), mb->fheldaction )); + + d->m_buttons->append ( b ); + } + } + reloadButtonMapping(); +} + +bool MyPal::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat ) +{ + int newkeycode = keycode; + + switch ( keycode ) { + case Key_Left : + case Key_Right: + case Key_Up : + case Key_Down : { + // Rotate the cursor keys by 270 + // keycode - Key_Left = position of the button starting from left clockwise + // add the rotation to it and modolo. No we've the original offset + // add the offset to the Key_Left key + if ( d->m_model == Model_MyPal_716 ) + newkeycode = Key_Left + ( keycode - Key_Left + 3 ) % 4; + 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 MyPal::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 MyPal::playAlarmSound() +{ +#ifndef QT_NO_SOUND + static Sound snd ( "alarm" ); + if(!snd.isFinished()) + return; + + changeMixerForAlarm(0, "/dev/sound/mixer", &snd ); + snd. play(); +#endif +} + +bool MyPal::setDisplayBrightness ( int bright ) +{ + bool res = false; + + if ( bright > 220 ) + bright = 220; + if ( bright < 0 ) + bright = 0; + + QString cmdline; + + switch ( model()) { + case Model_MyPal_716: + if ( !bright ) + cmdline = QString::fromLatin1( "echo 4 > /sys/class/backlight/pxafb/power"); + else + cmdline = QString::fromLatin1( "echo 0 > /sys/class/backlight/pxafb/power; echo %1 > /sys/class/backlight/pxafb/brightness" ).arg( bright ); + // No Global::shellQuote as we gurantee it to be sane + res = ( ::system( QFile::encodeName(cmdline) ) == 0 ); + break; + default: + res = OAbstractMobileDevice::setDisplayBrightness(bright); + } + + return res; +} + +int MyPal::displayBrightnessResolution() const +{ + switch ( model()) { + case Model_MyPal_716: + return 220; + default: + return OAbstractMobileDevice::displayBrightnessResolution(); + } +} + +bool MyPal::setDisplayStatus ( bool on ) +{ + bool res = false; + + QString cmdline; + + if ( model() == Model_MyPal_716 ) { + cmdline = QString::fromLatin1( "echo %1 > /sys/class/lcd/pxafb/power; echo %2 > /sys/class/backlight/pxafb/power").arg( on ? "0" : "4" ).arg( on ? "0" : "4" ); + } else { + return OAbstractMobileDevice::setDisplayStatus(on); + } + + res = ( ::system( QFile::encodeName(cmdline) ) == 0 ); + + return res; +} diff --git a/libopie2/opiecore/device/odevice_mypal.h b/libopie2/opiecore/device/odevice_mypal.h new file mode 100644 index 0000000..7827c78 --- a/dev/null +++ b/libopie2/opiecore/device/odevice_mypal.h @@ -0,0 +1,78 @@ +/* +                 This file is part of the Opie Project +              Copyright (C) The Opie Team + =. + .=l. +           .>+-= + _;:,     .>    :=|. This program is free software; you can +.> <`_,   >  .   <= redistribute it and/or modify it under +:`=1 )Y*s>-.--   : the terms of the GNU Library General Public +.="- .-=="i,     .._ License as published by the Free Software + - .   .-<_>     .<> Foundation; either version 2 of the License, +     ._= =}       : or (at your option) any later version. +    .%`+i>       _;_. +    .i_,=:_.      -`: PARTICULAR PURPOSE. See the GNU +..}^=.=       =       ; Library General Public License for more +++=   -.     .`     .: details. + :     =  ...= . :.=- + -.   .:....=;==+<; You should have received a copy of the GNU +  -_. . .   )=.  = Library General Public License along with +    --        :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#ifndef ODEVICE_MYPAL +#define ODEVICE_MYPAL + +#include "odevice_abstractmobiledevice.h" + +/* QT */ +#include + +namespace Opie { +namespace Core { +namespace Internal { + +class MyPal : public OAbstractMobileDevice, public QWSServer::KeyboardFilter +{ + + protected: + virtual void init(const QString&); + virtual void initButtons(); + + public: + virtual bool setDisplayStatus ( bool on ); + virtual bool setDisplayBrightness( int b ); + virtual int displayBrightnessResolution() const; + + virtual void playAlarmSound(); + + protected: + virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat ); + virtual void timerEvent( QTimerEvent *te ); + + int m_power_timer; +}; + +struct m_button { + uint model; + Qt::Key code; + char *utext; + char *pix; + char *fpressedservice; + char *fpressedaction; + char *fheldservice; + char *fheldaction; +}; + +} +} +} + +#endif -- cgit v0.9.0.2