From 5103b92c2fc7e28f87dcbdc3650820494359dcca Mon Sep 17 00:00:00 2001
From: ocheong <ocheong>
Date: Thu, 09 Oct 2003 10:57:25 +0000
Subject: Added class for Yopy devices.

It doesn't really do much, as power and backlight is still
handled by the demons running under X (Opie is meant to be used
without terminating X).
---
(limited to 'libopie/odevice.cpp')

diff --git a/libopie/odevice.cpp b/libopie/odevice.cpp
index 3ff029e..aadd0bf 100644
--- a/libopie/odevice.cpp
+++ b/libopie/odevice.cpp
@@ -75,7 +75,6 @@ public:
 	QStrList                   *m_cpu_frequencies;
 };
 
-
 class iPAQ : public ODevice, public QWSServer::KeyboardFilter {
 protected:
 	virtual void init ( );
@@ -369,6 +368,43 @@ struct r_button {
 	"buttonsettings", "raise()" },
 };
 
+class Yopy : public ODevice {
+protected:
+  virtual void init ( );
+  virtual void initButtons ( );
+
+public:
+  virtual bool suspend ( );
+
+  virtual bool setDisplayBrightness ( int b );
+  virtual int displayBrightnessResolution ( ) const;
+
+  static bool isYopy ( );
+};
+
+struct yopy_button {
+    Qt::Key code;
+    char *utext;
+    char *pix;
+    char *fpressedservice;
+    char *fpressedaction;
+    char *fheldservice;
+    char *fheldaction;
+} yopy_buttons [] = {
+  { Qt::Key_F10, QT_TRANSLATE_NOOP("Button", "Action Button"),
+    "devicebuttons/yopy_action",
+    "datebook", "nextView()",
+    "today", "raise()" },
+  { Qt::Key_F11, QT_TRANSLATE_NOOP("Button", "OK Button"),
+    "devicebuttons/yopy_ok",
+    "addressbook", "raise()",
+    "addressbook", "beamBusinessCard()" },
+  { Qt::Key_F12, QT_TRANSLATE_NOOP("Button", "End Button"),
+    "devicebuttons/yopy_end",
+    "QPE/Launcher", "home()",
+    "buttonsettings", "raise()" },
+};
+
 static QCString makeChannel ( const char *str )
 {
 	if ( str && !::strchr ( str, '/' ))
@@ -395,9 +431,10 @@ ODevice *ODevice::inst ( )
 			dev = new SIMpad ( );
 		else if ( QFile::exists ( "/proc/sys/board/name" ))
 			dev = new Ramses ( );
+		else if ( Yopy::isYopy() )
+		        dev = new Yopy ( );
 		else
 			dev = new ODevice ( );
-
 		dev-> init ( );
 	}
 	return dev;
@@ -930,6 +967,114 @@ void ODevice::virtual_hook(int, void* ){
 
 }
 
+/**************************************************
+ *
+ * Yopy 3500/3700
+ *
+ **************************************************/
+
+bool Yopy::isYopy ( )
+{
+  QFile f( "/proc/cpuinfo" );
+  if ( f. open ( IO_ReadOnly ) ) {
+    QTextStream ts ( &f );
+    QString line;
+    while( line = ts. readLine ( ) ) {
+      if ( line. left ( 8 ) == "Hardware" ) {
+	int loc = line. find ( ":" );
+	if ( loc != -1 ) {
+	  QString model = 
+	    line. mid ( loc + 2 ). simplifyWhiteSpace( );
+	  return ( model == "Yopy" );
+	}
+      }
+    }
+  }
+  return false;
+}
+
+void Yopy::init ( )
+{
+  d-> m_vendorstr = "G.Mate";
+  d-> m_vendor = Vendor_GMate;
+  d-> m_modelstr = "Yopy3700";
+  d-> m_model = Model_Yopy_3700;
+  d-> m_rotation = Rot0;
+  
+  d-> m_systemstr = "Linupy";
+  d-> m_system = System_Linupy;
+  
+  QFile f ( "/etc/issue" );
+  if ( f. open ( IO_ReadOnly )) {
+    QTextStream ts ( &f );
+    ts.readLine();
+    d-> m_sysverstr = ts. readLine ( );
+    f. close ( );
+  }
+}
+
+void Yopy::initButtons ( )
+{
+  if ( d-> m_buttons )
+    return;
+
+  d-> m_buttons = new QValueList <ODeviceButton>;
+
+  for (uint i = 0; i < ( sizeof( yopy_buttons ) / sizeof(yopy_button)); i++) {
+
+    yopy_button *ib = yopy_buttons + i;
+    
+    ODeviceButton b;
+
+    b. setKeycode ( ib-> code );
+    b. setUserText ( QObject::tr ( "Button", ib-> utext ));
+    b. setPixmap ( Resource::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 ( );
+  
+  QCopChannel *sysch = new QCopChannel("QPE/System", this);
+  connect(sysch, SIGNAL(received(const QCString &, const QByteArray & )), 
+	  this, SLOT(systemMessage(const QCString &, const QByteArray & )));
+}
+
+bool Yopy::suspend()
+{
+  /* Opie for Yopy does not implement its own power management at the 
+     moment.  The public version runs parallel to X, and relies on the 
+     existing power management features. */
+  return false;
+}
+
+bool Yopy::setDisplayBrightness(int bright)
+{
+  /* The code here works, but is disabled as the current version runs
+     parallel to X, and relies on the existing backlight demon. */
+#if 0
+  if ( QFile::exists("/proc/sys/pm/light") ) {
+    int fd = ::open("/proc/sys/pm/light", O_WRONLY);
+    if (fd >= 0 ) {
+      if (bright)
+	::write(fd, "1\n", 2);
+      else
+	::write(fd, "0\n", 2);
+      ::close(fd);
+      return true;
+    }
+  }
+#endif
+  return false;
+}
+
+int Yopy::displayBrightnessResolution() const
+{
+  return 2;
+}
 
 /**************************************************
  *
--
cgit v0.9.0.2