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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.