Hello Opie developers,
I submit to your attention and review a patch that introduces support
for the following Palm handhelds:
- Palm LD (Alex Osborne)
- Palm TX (myself)
- Palm Z72 (Sergey Lapin, Jan Herman, Aaron "airon11")
Thank you for your kind attention.
Best regards,
Cristiano
[opie_palm.patch]
diff -Naur 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 2007-01-29 09:38:34.000000000 +0100
@@ -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 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 2007-01-29 09:41:02.000000000 +0100
@@ -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,6 +149,7 @@
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;
diff -Naur opie-orig/libopie2/opiecore/device/odevice.h opie/libopie2/opiecore/device/odevice.h
--- opie-orig/libopie2/opiecore/device/odevice.h 2006-08-02 21:12:39.000000000 +0200
+++ opie/libopie2/opiecore/device/odevice.h 2007-01-29 10:22:37.000000000 +0100
@@ -138,6 +138,12 @@
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_TX = ( Model_Palm | 0x0002 ),
+ Model_Palm_Z72 = ( Model_Palm | 0x0003 ),
+
};
/**
@@ -156,6 +162,7 @@
Vendor_Asus,
Vendor_HTC,
Vendor_Motorola,
+ Vendor_Palm,
};
/**
diff -Naur 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 2007-02-01 11:56:42.000000000 +0100
@@ -0,0 +1,282 @@
+/*
+ � � � � � � � � This file is part of the Opie Project
+
+ Copyright (C)2002-2005 The Opie Team <opie-devel@...>
+ =.
+ .=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_Z72,
+ 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_Z72,
+ Qt::Key_F10, QT_TRANSLATE_NOOP( "Button", "Calendar Button" ),
+ "devicebuttons/palm_calendar",
+ "datebook", "nextView()",
+ "today", "raise()" },
+ { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72,
+ Qt::Key_F11, QT_TRANSLATE_NOOP( "Button", "Todo Button" ),
+ "devicebuttons/palm_todo",
+ "todolist", "raise()",
+ "todolist", "create()" },
+ { Model_Palm_TX | Model_Palm_LD | Model_Palm_Z72,
+ Qt::Key_F12, QT_TRANSLATE_NOOP( "Button", "Mail Button" ),
+ "devicebuttons/palm_mail",
+ "opiemail", "raise()",
+ "opiemail", "newmail()" },
+ { Model_Palm_LD,
+ Qt::Key_F7, QT_TRANSLATE_NOOP( "Button", "Voice Memo Button" ),
+ "devicebuttons/palm_voice_memo",
+ "QPE/TaskBar", "toggleMenu()",
+ "QPE/TaskBar", "toggleStartMenu()" },
+ { Model_Palm_LD,
+ Qt::Key_F8, QT_TRANSLATE_NOOP( "Button", "Rotate Button" ),
+ "devicebuttons/palm_rotate",
+ "QPE/Rotation", "flip()",0},
+};
+
+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 TX" ) {
+ d->m_modelstr = "Palm TX";
+ d->m_model = Model_Palm_TX;
+ }
+ 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_TX:
+ case Model_Palm_Z72:
+ m_backlightdev = "/sys/class/backlight/pxapwm-bl/";
+ d->m_rotation = Rot0;
+ d->m_direction = CCW;
+ d->m_qteDriver = "Transformed";
+ break;
+ default:
+ m_backlightdev = "";
+ }
+
+}
+
+
+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.
+
+ bool res = false;
+
+ if ( !isQWS( ) ) // only qwsserver is allowed to suspend
+ return false;
+
+ switch ( d->m_model ) {
+ case Model_Palm_LD:
+ case Model_Palm_Z72:
+ {
+ QCopChannel::send( "QPE/System", "aboutToSuspend()" );
+
+ ::sync(); // flush fs caches
+ res = ( ::system ( "apm --suspend" ) == 0 );
+
+ QCopChannel::send( "QPE/System", "returnFromSuspend()" );
+ }
+ break;
+ }
+
+ return res;
+}
+
+
+int Palm::displayBrightnessResolution() const
+{
+ int res = 1;
+
+ switch ( d->m_model )
+ {
+ case Model_Palm_LD:
+ case Model_Palm_TX:
+ 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_TX:
+ 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 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 2007-01-29 09:47:08.000000000 +0100
@@ -0,0 +1,72 @@
+/*
+� � � � � � � � This file is part of the Opie Project
+ � � � � � � Copyright (C) The Opie Team <opie-devel@...>
+ =.
+ .=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;
+
+};
+
+struct palm_button
+{
+ uint model;
+ Qt::Key code;
+ char *utext;
+ char *pix;
+ char *fpressedservice;
+ char *fpressedaction;
+ char *fheldservice;
+ char *fheldaction;
+};
+
+}
+}
+}
+
+#endif
_______________________________________________
http://opie.handhelds.org/cgi-bin/moin.cgi/DeveloperWikiIndexOpie-devel mailing list
Opie-devel@...
https://handhelds.org/mailman/listinfo/opie-devel