palmtx (and others) patch
"Cristiano P." <[email protected]>
| Newsgroups | gmane.comp.handhelds.opie.devel |
|---|---|
| Message-ID | <[email protected]> |
Hello Opie developers, I submit to your attention and review a patch to add support for the Palm TX handheld (machine, buttons, backlight, rotation) and initial support for some other Palm models. Please, be clement. Best regards, Cristiano P. _______________________________________________ http://opie.handhelds.org/cgi-bin/moin.cgi/DeveloperWikiIndex Opie-devel mailing list [email protected] https://handhelds.org/mailman/listinfo/opie-devel
palmtx.patch
(text/x-patch, 14.4 KB)
diff -Naur --exclude=CVS opie-orig/libopie2/opiecore/device/device.pro opie/libopie2/opiecore/device/device.pro
--- opie-orig/libopie2/opiecore/device/device.pro 2006-05-19 14:22:12.000000000 +0200
+++ opie/libopie2/opiecore/device/device.pro 2006-07-31 16:56:42.000000000 +0200
@@ -11,7 +11,8 @@
device/odevice_yopy.h \
device/odevice_mypal.h \
device/odevice_htc.h \
- device/odevice_motorola_ezx.h
+ device/odevice_motorola_ezx.h \
+ device/odevice_palm.h
SOURCES += device/odevice.cpp \
device/odevicebutton.cpp \
@@ -26,5 +27,6 @@
device/odevice_yopy.cpp \
device/odevice_mypal.cpp \
device/odevice_htc.cpp \
- device/odevice_motorola_ezx.cpp
+ device/odevice_motorola_ezx.cpp \
+ device/odevice_palm.cpp
diff -Naur --exclude=CVS opie-orig/libopie2/opiecore/device/odevice.cpp opie/libopie2/opiecore/device/odevice.cpp
--- opie-orig/libopie2/opiecore/device/odevice.cpp 2006-05-19 14:22:12.000000000 +0200
+++ opie/libopie2/opiecore/device/odevice.cpp 2006-07-31 16:59:02.000000000 +0200
@@ -39,6 +39,7 @@
#include "odevice_genuineintel.h"
#include "odevice_htc.h"
#include "odevice_motorola_ezx.h"
+#include "odevice_palm.h"
/* QT */
#include <qapplication.h>
@@ -148,7 +149,8 @@
else if ( line.contains( "Tradesquare.NL", false ) ) dev = new Internal::Beagle();
else if ( line.contains( "HTC", false ) ) dev = new Internal::HTC();
else if ( line.contains( "Motorola", false ) ) dev = new Internal::Motorola_EZX();
-
+ else if ( line.contains( "Palm", false ) ) dev = new Internal::Palm();
+
else qWarning( "ODevice() - unknown hardware - using default." );
break;
} else if ( line.startsWith( "vendor_id" ) ) {
diff -Naur --exclude=CVS opie-orig/libopie2/opiecore/device/odevice.h opie/libopie2/opiecore/device/odevice.h
--- opie-orig/libopie2/opiecore/device/odevice.h 2006-07-14 22:15:58.000000000 +0200
+++ opie/libopie2/opiecore/device/odevice.h 2006-07-31 17:03:00.000000000 +0200
@@ -137,6 +137,18 @@
Model_Motorola_All = ( Model_Motorola | 0xffff ),
Model_Motorola_EZX = ( Model_Motorola | 0x0001 ),
+ Model_Palm = ( 10 << 16),
+ Model_Palm_All = ( Model_Palm | 0xffff ),
+ Model_Palm_LD = ( Model_Palm | 0x0001 ),
+ Model_Palm_TTC = ( Model_Palm | 0x0002 ),
+ Model_Palm_TE2 = ( Model_Palm | 0x0003 ),
+ Model_Palm_TT2 = ( Model_Palm | 0x0004 ),
+ Model_Palm_TT3 = ( Model_Palm | 0x0005 ),
+ Model_Palm_TT5 = ( Model_Palm | 0x0006 ),
+ Model_Palm_TX = ( Model_Palm | 0x0007 ),
+ Model_Palm_Z71 = ( Model_Palm | 0x0008 ),
+ Model_Palm_Z72 = ( Model_Palm | 0x0009 ),
+
};
/**
@@ -155,6 +167,7 @@
Vendor_Asus,
Vendor_HTC,
Vendor_Motorola,
+ Vendor_Palm,
};
/**
diff -Naur --exclude=CVS opie-orig/libopie2/opiecore/device/odevice_palm.cpp opie/libopie2/opiecore/device/odevice_palm.cpp
--- opie-orig/libopie2/opiecore/device/odevice_palm.cpp 1970-01-01 01:00:00.000000000 +0100
+++ opie/libopie2/opiecore/device/odevice_palm.cpp 2006-07-31 17:36:35.000000000 +0200
@@ -0,0 +1,296 @@
+/*
+ Â Â Â Â Â Â Â Â This file is part of the Opie Project
+
+ Copyright (C)2002-2006 The Opie Team <[email protected]>
+ =.
+ .=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_,=:_. Â Â Â -<s. This program is distributed in the hope that
+Â Â Â + Â . Â -:. Â Â Â = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. Â Â .:, Â Â . . . without even the implied warranty of
+Â Â =_ Â Â Â Â + Â Â =;=|` MERCHANTABILITY or FITNESS FOR A
+Â _.=:. Â Â Â : Â Â :=>`: 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_palm.h"
+
+/* QT */
+#include <qapplication.h>
+#include <qfile.h>
+#include <qtextstream.h>
+#include <qwindowsystem_qws.h>
+#include <qgfx_qws.h>
+
+/* OPIE */
+#include <qpe/config.h>
+#include <qpe/sound.h>
+#include <qpe/qcopenvelope_qws.h>
+
+#include <opie2/okeyfilter.h>
+#include <opie2/oresource.h>
+
+/* STD */
+#include <fcntl.h>
+#include <math.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <sys/ioctl.h>
+#include <sys/time.h>
+#include <unistd.h>
+#ifndef QT_NO_SOUND
+#include <linux/soundcard.h>
+#endif
+
+using namespace Opie::Core;
+using namespace Opie::Core::Internal;
+
+struct palm_button palm_buttons [] = {
+ { Model_Palm_TX | Model_Palm_LD | Model_Palm_TT5,
+ Qt::Key_F9, QT_TRANSLATE_NOOP( "Button", "Home Button" ),
+ "devicebuttons/palm_home",
+ "QPE/Launcher", "home()",
+ "buttonsettings", "raise()" },
+ { Model_Palm_TX | Model_Palm_LD | Model_Palm_TT5,
+ Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Calendar Button" ),
+ "devicebuttons/palm_calendar",
+ "datebook", "nextView()",
+ "today", "raise()" },
+ { Model_Palm_TX | Model_Palm_LD | Model_Palm_TT5,
+ Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "Todo Button" ),
+ "devicebuttons/palm_todo",
+ "todolist", "raise()",
+ "todolist", "create()" },
+ { Model_Palm_TX | Model_Palm_LD | Model_Palm_TT5,
+ Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "Mail Button" ),
+ "devicebuttons/palm_mail",
+ "opiemail", "raise()",
+ "opiemail", "newmail()" },
+};
+
+void Palm::init(const QString& cpu_info)
+{
+ d->m_vendorstr = "Palm";
+ d->m_vendor = Vendor_Palm;
+
+ QString model = "unknown";
+
+ int loc = cpu_info.find( ":" );
+ if ( loc != -1 )
+ model = cpu_info.mid( loc+2 ).simplifyWhiteSpace();
+ else
+ model = cpu_info;
+
+ if ( model == "Palm LifeDrive" ) {
+ d->m_modelstr = "Palm LifeDrive";
+ d->m_model = Model_Palm_LD;
+ }
+ else if ( model == "Palm Tungsten TC" ) {
+ d->m_modelstr = "Palm Tungsten TC";
+ d->m_model = Model_Palm_TTC;
+ }
+ else if ( model == "Palm Tungsten E2" ) {
+ d->m_modelstr = "Palm Tungsten E2";
+ d->m_model = Model_Palm_TE2;
+ }
+ else if ( model == "Palm Tungsten T2" ) {
+ d->m_modelstr = "Palm Tungsten T2";
+ d->m_model = Model_Palm_TT2;
+ }
+ else if ( model == "Palm Tungsten T3" ) {
+ d->m_modelstr = "Palm Tungsten T3";
+ d->m_model = Model_Palm_TT3;
+ }
+ else if ( model == "Palm Tungsten T5" ) {
+ d->m_modelstr = "Palm Tungsten T5";
+ d->m_model = Model_Palm_TT5;
+ }
+ else if ( model == "Palm TX" ) {
+ d->m_modelstr = "Palm TX";
+ d->m_model = Model_Palm_TX;
+ }
+ else if ( model == "Palm Zire 71" ) {
+ d->m_modelstr = "Palm Zire 71";
+ d->m_model = Model_Palm_Z71;
+ }
+ else if ( model == "Palm Zire 72" ) {
+ d->m_modelstr = "Palm Zire 72";
+ d->m_model = Model_Palm_Z72;
+ }
+ else
+ d->m_model = Model_Unknown;
+
+ switch ( d->m_model )
+ {
+ case Model_Palm_LD:
+ case Model_Palm_TT3:
+ case Model_Palm_TT5:
+ case Model_Palm_TX:
+ case Model_Palm_TE2:
+ m_backlightdev = "/sys/class/backlight/pxapwm-bl/";
+ d->m_rotation = Rot0;
+ d->m_direction = CCW;
+ d->m_qteDriver = "Transformed";
+ break;
+ case Model_Palm_Z71:
+ m_backlightdev = "/sys/class/backlight/palmz71-bl/";
+ break;
+ case Model_Palm_Z72:
+ m_backlightdev = "/sys/class/backlight/palmz72-bl/";
+ break;
+
+ default:
+ m_backlightdev = "";
+ }
+
+ // Distribution detection code now in the base class
+}
+
+
+void Palm::initButtons()
+{
+
+ if ( d->m_buttons )
+ return ;
+
+ if ( isQWS( ) ) {
+ addPreHandler(this);
+ }
+
+ d->m_buttons = new QValueList <ODeviceButton>;
+
+ for ( uint i = 0; i < ( sizeof( palm_buttons ) / sizeof( palm_button ) ); i++ )
+ {
+ palm_button *ib = palm_buttons + i;
+ ODeviceButton b;
+
+ if (( ib->model & d->m_model ) == d->m_model ) {
+ b. setKeycode ( ib->code );
+ b. setUserText ( QObject::tr ( "Button", ib->utext ));
+ b. setPixmap ( OResource::loadPixmap ( ib->pix ));
+ b. setFactoryPresetPressedAction ( OQCopMessage ( makeChannel ( ib->fpressedservice ), ib->fpressedaction ));
+ b. setFactoryPresetHeldAction ( OQCopMessage ( makeChannel ( ib->fheldservice ), ib->fheldaction ));
+
+ d->m_buttons->append ( b );
+ }
+ }
+ reloadButtonMapping();
+}
+
+
+bool Palm::filter ( int /*unicode*/, int keycode, int modifiers, bool isPress, bool autoRepeat )
+{
+ int newkeycode = keycode;
+
+ if (qt_screen->transformOrientation() != Rot0){
+
+ switch ( keycode ) {
+ case Key_Left :
+ case Key_Right:
+ case Key_Up :
+ case Key_Down :
+ newkeycode = Key_Left + ( keycode - Key_Left + (int) qt_screen->transformOrientation() ) % 4;
+ default:
+ break;
+ }
+
+ if (newkeycode!=keycode) {
+ if ( newkeycode != Key_unknown ) {
+ QWSServer::sendKeyEvent ( -1, newkeycode, modifiers, isPress, autoRepeat );
+ }
+ return true;
+ }
+
+ }
+
+ return false;
+}
+
+bool Palm::suspend()
+{
+ /* some Palms do not implement their own power management at the
+ moment.
+ */
+ return false;
+}
+
+
+int Palm::displayBrightnessResolution() const
+{
+ int res = 1;
+
+ switch ( d->m_model )
+ {
+ case Model_Palm_LD:
+ case Model_Palm_TE2:
+ case Model_Palm_TT3:
+ case Model_Palm_TT5:
+ case Model_Palm_TX:
+ case Model_Palm_Z71:
+ case Model_Palm_Z72:
+ int fd = ::open( m_backlightdev + "max_brightness", O_RDONLY|O_NONBLOCK );
+ if ( fd )
+ {
+ char buf[100];
+ if ( ::read( fd, &buf[0], sizeof buf ) ) ::sscanf( &buf[0], "%d", &res );
+ ::close( fd );
+ }
+ break;
+
+ default:
+ res = 1;
+ }
+
+ return res;
+}
+
+
+bool Palm::setDisplayBrightness( int bright )
+{
+ bool res = false;
+
+ if ( bright > 255 ) bright = 255;
+ if ( bright < 0 ) bright = 0;
+
+ int numberOfSteps = displayBrightnessResolution();
+ int val = ( bright == 1 ) ? 1 : ( bright * numberOfSteps ) / 255;
+
+ switch ( d->m_model )
+ {
+
+ case Model_Palm_LD:
+ case Model_Palm_TE2:
+ case Model_Palm_TT3:
+ case Model_Palm_TT5:
+ case Model_Palm_TX:
+ case Model_Palm_Z71:
+ case Model_Palm_Z72:
+ int fd = ::open( m_backlightdev + "brightness", O_WRONLY|O_NONBLOCK );
+ if ( fd )
+ {
+ char buf[100];
+ int len = ::snprintf( &buf[0], sizeof buf, "%d", val );
+ res = ( ::write( fd, &buf[0], len ) == 0 );
+ ::close( fd );
+ }
+ break;
+
+ default: res = false;
+ }
+ return res;
+}
diff -Naur --exclude=CVS opie-orig/libopie2/opiecore/device/odevice_palm.h opie/libopie2/opiecore/device/odevice_palm.h
--- opie-orig/libopie2/opiecore/device/odevice_palm.h 1970-01-01 01:00:00.000000000 +0100
+++ opie/libopie2/opiecore/device/odevice_palm.h 2006-07-31 17:04:25.000000000 +0200
@@ -0,0 +1,72 @@
+/*
+ This file is part of the Opie Project
+ Copyright (C) The Opie Team <[email protected]>
+ =.
+ .=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_,=:_. -<s. This program is distributed in the hope that
+ + . -:. = it will be useful, but WITHOUT ANY WARRANTY;
+ : .. .:, . . . without even the implied warranty of
+ =_ + =;=|` MERCHANTABILITY or FITNESS FOR A
+ _.=:. : :=>`: 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_PALM
+#define ODEVICE_PALM
+
+#include "odevice_abstractmobiledevice.h"
+
+namespace Opie {
+namespace Core {
+namespace Internal {
+class Palm : public OAbstractMobileDevice, public QWSServer::KeyboardFilter
+{
+ protected:
+
+ virtual void init(const QString&);
+ virtual void initButtons();
+ virtual bool filter( int unicode, int keycode, int modifiers, bool isPress, bool autoRepeat );
+
+ QString m_backlightdev;
+
+ public:
+ virtual bool suspend();
+
+ virtual bool setDisplayBrightness ( int b );
+ virtual int displayBrightnessResolution() const;
+ //virtual Transformation rotation() const;
+};
+
+struct palm_button
+{
+ uint model;
+ Qt::Key code;
+ char *utext;
+ char *pix;
+ char *fpressedservice;
+ char *fpressedaction;
+ char *fheldservice;
+ char *fheldaction;
+};
+
+}
+}
+}
+
+#endif